Guits和Mockto为Junits

时间:2016-04-13 12:59:56

标签: java unit-testing junit mockito guice

我正在尝试为解析器编写Junit测试。此解析器根据所选文件创建顶点和边的图形。在解析器中,我多次调用“VertexImpl”的构造函数来创建我需要的顶点。

当我测试解析器时,我不想创建实际的“VertexImpl”对象,因为我希望它是一个真正的单元测试

每次使用“Mockito”和“Guice”调用构造函数时,如何制作模拟对象?

2 个答案:

答案 0 :(得分:2)

您可以在测试类中执行类似的操作:

@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 ) );
        }
    };
}

字段_myMock,YourClassToMock的实例,将作为此测试的模拟注入,其他字段将像生产中一样正常注入(由于使用了您的应用程序模块)。

小心,你不能两次定义注射

答案 1 :(得分:1)

如果您不希望解析器创建某些对象;好;然后重写它以不创建这样的对象。

我的意思是:你的解析器应该有一些“工厂”对象,解析器可以用它来创建这样的VertexImpls。对于你的单元测试,你“嘲笑”那个工厂;从而完全控制解析器应该做什么。

请注意:测试代码与单元测试和生产使用相同。唯一的区别是:在单元测试设置中,工厂对象是不同的(你想阅读有关如何做到这一点的依赖注入)。