为什么使用框架创建模拟对象而不是创建对象本身

时间:2012-08-13 11:15:42

标签: java mockito

  

可能重复:
  What is Object Mocking and when do I need it?

为什么使用

创建模拟对象
MyObject myOb = Mockito.mock(MyObject.class);

什么时候可以改为使用:

MyObject myOb = new MyObject();

    public class MyObject(){
       private String str;
       //getters and setters
    }

如果上面的对象变得更复杂&它与其他对象有依赖关系,我还需要为这些对象创建模拟对象。因此,如果需要将所有成员设置为测试对象,为什么不创建对象本身而不是使用框架模拟它?

3 个答案:

答案 0 :(得分:4)

只需比较您在示例中编写的行数。当然,你可以手动编写所有的模拟,但是你会做更多的打字,而且你的测试的可读性会降低。

答案 1 :(得分:2)

当你嘲笑某些东西时,你也可以断言某些事情发生了,就像你可以断言用参数调用一个方法等。

你不能使用具体的类

来做到这一点

答案 2 :(得分:1)

如果你问这个问题,你从来没有遇到过足以需要嘲笑的测试场景。当然,如果你的类很简单且足够孤立,你可以通过简单地实例化它们来测试它们,你应该这样做。

但是,在许多现实生活中,您希望测试依赖于其他类的类,而这些类在单元测试场景中不可能(或不希望)实例化它们。它们可能与外部服务或数据库通信。可能是他们需要实例化一长串额外的依赖关系。

还要记住,单元测试是关于隔离特定的计算单位,并验证它们是否应该独立运行。模拟是一种很好的方法,允许您从测试中删除依赖项。有效地说“假设依赖关系A返回Y,验证此方法返回X(并且使用这些参数调用依赖关系A)。