为什么使用
创建模拟对象MyObject myOb = Mockito.mock(MyObject.class);
什么时候可以改为使用:
MyObject myOb = new MyObject();
public class MyObject(){
private String str;
//getters and setters
}
如果上面的对象变得更复杂&它与其他对象有依赖关系,我还需要为这些对象创建模拟对象。因此,如果需要将所有成员设置为测试对象,为什么不创建对象本身而不是使用框架模拟它?
答案 0 :(得分:4)
只需比较您在示例中编写的行数。当然,你可以手动编写所有的模拟,但是你会做更多的打字,而且你的测试的可读性会降低。
答案 1 :(得分:2)
当你嘲笑某些东西时,你也可以断言某些事情发生了,就像你可以断言用参数调用一个方法等。
你不能使用具体的类
来做到这一点答案 2 :(得分:1)
如果你问这个问题,你从来没有遇到过足以需要嘲笑的测试场景。当然,如果你的类很简单且足够孤立,你可以通过简单地实例化它们来测试它们,你应该这样做。
但是,在许多现实生活中,您希望测试依赖于其他类的类,而这些类在单元测试场景中不可能(或不希望)实例化它们。它们可能与外部服务或数据库通信。可能是他们需要实例化一长串额外的依赖关系。
还要记住,单元测试是关于隔离特定的计算单位,并验证它们是否应该独立运行。模拟是一种很好的方法,允许您从测试中删除依赖项。有效地说“假设依赖关系A返回Y,验证此方法返回X(并且使用这些参数调用依赖关系A)。