0

可能重复:
什么是对象模拟,我什么时候需要它?

为什么使用创建模拟对象

MyObject myOb = Mockito.mock(MyObject.class);

什么时候可以改用:

MyObject myOb = new MyObject();

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

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

4

3 回答 3

6

只需比较您在示例中编写的行数。当然,你可以手动编写所有的模拟,但是你会做更多的打字,你的测试会变得不那么可读。

于 2012-08-13T11:18:43.157 回答
2

当你模拟某些东西时,你也可以断言某些事情发生了,比如你可以断言一个方法是用参数调用的等等。

您不能使用具体类来做到这一点

于 2012-08-13T11:20:29.963 回答
1

如果你问这个问题,你从来没有遇到过复杂到需要模拟的测试场景。当然,如果您的类足够简单且隔离,您可以通过简单地实例化它们来测试它们,那么您应该这样做。

但是,在许多实际案例中,您希望测试依赖于其他类的类,而在单元测试场景中不可能(或不希望)实例化它们。可能是它们与外部服务或数据库进行通信。可能是它们具有您必须实例化的一长串附加依赖项。

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

于 2012-08-13T11:27:49.777 回答