我正在尝试为解析器编写Junit测试。该解析器从选定的文件中创建顶点和边的图形。在解析器中,我多次调用"VertexImpl"的构造函数来创建我需要的顶点。
当我测试解析器时,我不想创建实际的"VertexImpl"对象,因为我希望它是一个真正的单元测试。
如何在每次使用"Mockito"one_answers"Guice"调用构造函数时生成mock对象?
您可以在测试类中执行类似的操作:
@Inject
private YourClassToMock _myMock;
@Before
public void setUp( ) throws Exception {
Guice.createInjector( /* Your application modules */, mockModule( ) )
.injectMembers( this );
}
private Module mockModule( ) {
return new AbstractModule( ) {
@Override
protected void configure( ) {
bind( YourClassToMock.class ).toInstance( mock( YourClassToMock.class ) );
}
};
}
YourClassToMock
的实例字段_myMokk将作为该测试的mock注入,其他字段将像在生产中一样正常注入(由于使用了应用程序模块)。
小心,不能定义两次注射
如果您不希望解析器创建某些对象;好然后重写它以不创建这样的对象。
我的意思是:你的解析器应该有一些"工厂"对象,解析器可以用来创建这样的VertexImpl。对于您的单元测试,您可以"模拟"那个工厂;从而完全控制解析器应该做什么
请注意:对于单元测试和生产使用,测试中的代码是相同的。唯一的区别是:在单元测试设置中,工厂对象是不同的(您想了解如何进行依赖注入)。