在单元测试中,模拟对象如何比真实对象更好?
创建模拟对象时,究竟是什么意思?例如,假设您创建了
a a = Mockito.mock(A.class);
是否会创建A类对象?或其他什么?
请让我知道这些。
答案 0 :(得分:1)
单元测试建议您只想在小型环境(通常是一个类)中查看您的功能。但是这堂课经常与其他班级交谈,而那些班级则与其他班级交谈......这可能意味着很多工作,只是为了让这一课成为现实。此外,您只想测试您的设备。这就是模拟/存根进入的地方。稍后我将解释这种区别。
你做的是 - 而不是重新创建你的整个应用程序 - 来做出假设。模拟基本上是一个假设。你的课所需要的一切都被嘲笑或抄袭。对于已经测试过的设备部件,情况也是如此。你假设,然后你测试你的单位的一个特定(真实)部分。然后在必要时嘲笑这个,依此类推。
两者都是假设,但嘲笑也是期望。因此,如果您使用模拟,您的测试框架应该抱怨,如果它没有被使用/调用。 另一方面,存根就是这种情况。就像随机调用Internet一样,查找数据库,这对测试本身并不重要。
您的框架实际创建的内容取决于框架和语言。但它将/不应该调用原始方法,如上所述。通常,您必须明确地告诉框架,这有时可能有意义。