java - 如何捕获在测试中创建的模拟类型的实例?

标签 java jmockit

我正在 try catch 在测试中创建的模拟类型的实例。我无法让它工作。

给定类(class):

public class Foo {}

以下测试失败:

@RunWith(JMockit.class)
public class FooTest {

    @Test
    public void capturing(@Capturing Foo expected) {
        final Foo actual = new Foo();
        assertThat(actual, is(theInstance(expected)));
    }

}

知道我可能做错了什么吗?

我还尝试使用字段而不是测试参数(见下文),但它也失败了:

@RunWith(JMockit.class)
public class FooTest {

    // The captured instance is now a field, instead of a test parameter.
    @Capturing private Foo expected;

    @Test
    public void capturing() {
        final Foo actual = new Foo();
        assertThat(actual, is(theInstance(expected)));
    }

}

documentation声明它应该可以工作,但我无法让它工作。

谢谢

JMockit v1.7

最佳答案

最简单的方法如下:

@Test
public void capturing(@Mocked Foo unused)
{
    final Foo actual = new Foo();

    new Verifications() {{
        List<Foo> expected = withCapture(new Foo());
        assertThat(actual, is(theInstance(expected.get(0))));
    }};
}

不过,上面使用的withCapture(T)方法只是在JMockit 1.8中添加的,目前还没有发布。

关于java - 如何捕获在测试中创建的模拟类型的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23250432/

相关文章:

java - 在单元测试中,我们是否也测试父类(super class)?

java - 在 Java 2D 中实现 Polygon2D

java - 如何处理spring状态机未处理的事件

java - 使用 javamail 从 hotmail 发送?

java - 无法理解类在 Scala 中的工作原理

java - 在 Firebase 中查询组的正确做法

java - JMockit mock 没有被破坏

java - 通过静态方法捕获进行验证

java - 间歇性 JUnit 错误 - java 虚拟机连接被拒绝

android - Robolectric + JMockIt 设置