java - 使用 JMockit 为类创建虚拟对象

标签 java unit-testing jmockit

我想使用 JMockit 创建虚拟对象 ( see definition here )。

这些对象需要作为非空构造函数参数,但特定的单元测试不需要。由于构造函数可能会检查参数(例如使用 Objects.requireNonNull),因此虚拟对象不能只是 null

我想使用类似的东西

new ObjectWithUnusedDependency(dummy());

其中 dummy() 创建一个虚拟对象。

使用

public static <T> T dummy() {
    return new MockUp<T>() {}.getMockInstance();
}

如果T是一个接口(interface),这可能会起作用,但对于类getMockInstance返回null

如果在这样的虚拟对象上调用方法时测试失败,那就太好了。

有没有办法使用 JMockit 来完成此任务?

最佳答案

使用 JMockit 可以很容易地做到这一点。只需声明所需类型的模拟字段或模拟参数,并将其传递给被测试的代码。例如:

@Test
public void myTest(@Injectable SomeClass dummy)
{
    new ObjectWithUnusedDependency(dummy).doSomething();
}

适用于任何引用类型,包括final类、abstract类、接口(interface)、枚举等。

此外,如果您希望测试在虚拟对象上调用任何方法时失败,则需要添加“完整验证”:

@Test
public void myTest(@Injectable SomeClass dummy)
{
    new ObjectWithUnusedDependency(dummy).doSomething();

    new FullVerifications(dummy) {};
}

关于java - 使用 JMockit 为类创建虚拟对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25104238/

相关文章:

java - 以多对多关系的方式将数据添加到对象中,

JAVA - 如果其中一个函数失败,如何优雅地继续 while 循环?

python - 如何替换被测模块的文件访问引用

java - 根据时间值返回不同的值

java - JMockit 未正确初始化

java - 将 @DataProvider 与 Jmockit 一起使用

Java 访问修饰符 - 可用于子类和包的方法

java - 使用 convertView 和自定义数据 listView 时出现 NullPointerException

javascript - 对大批量动态生成的字符串进行单元测试的方法

python - 使用 Python unittest 缓存 setUp() 的结果