当前,正在尝试为一个复杂的系统编写单元测试,该系统在其方法之一中使用构造函数,该构造函数将自身作为参数注入数据库上下文中并从正确的环境中检索正确的对象。
尝试使用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 obj的get / setter的可能性-这不是我的代码,我只是在这里进行测试。
最佳答案
有一个扩展到Mockito的库:PowerMockito。
它比平常的Mockito允许您做更多的黑客操作。这很不错,但是事实是,如果您需要PowerMockito,您的设计通常会闻起来。
我会明确地重构您的设计。但是,如果由于某种原因您无法执行此操作,请使用PowerMockito看一下构造函数模拟:
http://benkiefer.com/blog/2013/04/23/powermockito-constructor-mocking/