我是单元测试新手,我的经理推荐Mockito。我正在探索这个工具,但是有像有些混乱:为什么我们需要创建模拟对象?
为什么我们需要创建模拟对象,而我们可以创建任何类的实物。
为什么我们在开发人员设置方法的行为时,使用stubbing(如'when and then')条件设置任何方法的行为。
如果我们做任何方法的存根,那么它将是静态的,如果开发者改变了那个方法的代码,那么它的影响就不会出现在我们的测试用例中,它总是会通过。
例如:
TestingServices test = Mockito.mock(TestingServices.class);
// define return value for method getUniqueId()
System.out.println("unique id is "+test.getUniqueId());
when(test.getUniqueId()).thenReturn(44);
assertEquals(test.getUniqueId(),44);
在上面的代码片断assertEquals
将总是通过,显影剂是否改变的代码或没有。
您的测试是一个坏榜样,因为它是单元测试它的嘲讽同样的事情。在一个真实的例子中,你可以通过嘲笑B来单元测试A,以便隔离A的行为,反之亦然。然后你会有更高层次的集成测试,检查A和B在两者都不被模拟时仍然正确交互。 – jonrsharpe
嗨Jonrsharpe,谢谢你给我回答。其实我的担忧是为什么我们需要疯狂的模拟物体和残肢?请解释一下,你的帮助会清除我的疑惑。 –
嗨Exoddus,你可以给我更多的例子,当我们创建模拟对象或当不需要创建它。 –