java - Mockito,模拟类方法中的构造函数

标签 java unit-testing mockito

当前正在尝试为一个复杂的系统编写单元测试,该系统在其方法之一中使用构造函数,该构造函数将自身作为参数注入(inject)数据库上下文并从正确的环境中检索正确的对象。

尝试使用 Mockito 来模拟这一点,并使其返回一个测试对象,而不是尝试从数据库中查找它;但我对如何使其与传统技术和 @InjectMocks + @Mock 注释一起工作感到困惑。

代码的实质如下:

public FooService{

public String fooFindObject(FooDefinition fooDef) throws FooDefinitionException{

FooFinder theFooFinders = new FooFinder(this);
Foo fooObj = theFooFinders.findFoo(fooDef);

//Logic to be tested inside here that will throw exception upon bad foo definitions

return fooObj.trackingId();

}

我如何模拟这个 FooFinder 对象并使其返回我自己的测试 foo 对象,以便我可以测试定义 obj。正在使用 Mockito,并且不允许重写此代码以使用 FooFinder 对象的 get/setters 的可能性 - 这不是我的代码,我只是在那里测试它。

最佳答案

有一个扩展 Mockito 的库:PowerMockito。

它允许您比通常的 Mockito 进行更多的黑客攻击。这很不错,但问题是,如果您需要 PowerMockito,您的设计通常会有异味。

我肯定会重构你的设计。但如果您因任何原因无法执行此操作,请查看使用 PowerMockito 进行构造函数模拟:

http://benkiefer.com/blog/2013/04/23/powermockito-constructor-mocking/

关于java - Mockito,模拟类方法中的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40652781/

相关文章:

javascript - 使用 Require 和 Resharper 进行前端 javascript 测试

java - Kafka - 如何模拟消费者记录?

java - 使用 Mockito 对 Junit 中的私有(private)函数进行单元测试

java - 出现错误匹配器异常的无效用户

java - android java 从 ImageView 中选择颜色

Java XML 解析器执行每个节点两次

java - IntelliJ 插件 : maven, gradle 和 travis-ci

java - 修复 Java 中动画 gif 的帧速率

unit-testing - 有什么办法可以使用GORM在模拟域对象中设置ID

使用两个不同文件的类中的 Python 模拟内置 'open'