2012-08-13 42 views
0

可能重复:
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 
    } 

如果上述问题变得更加复杂&它依赖于其他对象,我需要为这些还创建模拟对象。因此,如果需要将所有成员设置为测试对象,为什么不直接创建对象而不是使用框架来嘲笑它呢?

+1

因为https://code.google.com/p/mockito/描述的Mockito做什么 – 2012-08-13 11:18:50

+1

因为模拟框架提供比普通对象,表现力,存根,验证,回调等更多的功能。在单元测试中,您现在更关注协作者之间的交互,这意味着您可以进一步测试不同的执行路径,在不同的场景下,也就是说,它有助于覆盖你的代码 – Brice 2012-08-13 12:27:21

回答

4

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

+0

另外,考虑你的对象有20多种方法,但你只关心嘲笑他们中的一个*(或其中的一些)。对象:仍然是1行,自己写:很多行 – 2012-08-13 11:31:44

+0

@BjörnPollex行数I ha已经写在我的例子中是一样的 - 每一行 – 2012-08-13 13:26:25

+1

也许我误解了一些东西。它看起来像你写'MyObject'类专门用作模拟。假设你需要实现一个用于测试的接口,但是你还没有一个接口(例如你需要从你正在编写测试的库的用户那里进行回调)。这是嘲笑可以帮助你的地方。不要只为测试编写一个实现,你可以让一个模拟框架来处理这个。这就是我在答案中的意思。 – 2012-08-13 13:38:34

2

当你嘲笑的东西,你也可以断言某些事情发生,比如你可以断言一个方法调用参数等

你不能这样使用的具体类

+3

你可以用一个具体的类来做到这一点,但你必须手工编写它的逻辑。嘲笑框架真的只是方便 - 但**很多**。 – 2012-08-13 11:22:02

+0

你可以,但你必须为每个场景创建一个会议课堂。在我看来,嘲笑一个类更容易,因为你只需要嘲笑你正在测试的场景,其他方法,属性等可以忽略 – 2012-08-13 11:24:55

1

如果你做问这个问题,你从未遇到过需要嘲笑的测试场景复合体。当然,如果你的课程简单且隔离,你可以通过实例化它们来测试它们,你应该。

然而,在许多现实生活中的情况下,你想测试对其他类的依赖关系,其中这是不可能的(或期望)实例他们在一个单元测试场景类。这可能是他们与外部服务或数据库进行通信。这可能是因为他们需要实例化一长串额外的依赖关系。

还请记住,单元测试大约是隔离特定的计算单位,并验证它们的行为应该是独立的。嘲笑是这样做的好方法,允许您从测试中移除依赖关系。用途不同说:“假设依赖A返回Y,验证此方法返回X(和依赖A被称为与这些参数)。

相关问题