我是单位测试新手,我的经理推荐Mockito。我正在探索这个工具,但有一些困惑,如:
为什么我们需要创建模拟对象,同时我们可以创建任何类的真实对象。
为什么我们设置任何方法的行为,使用类似'当然后'开发人员设置方法行为时的条件。
如果我们对任何方法进行存根,那么它将是静态的,如果开发人员更改该方法的代码,那么它的影响将不会出现在我们的测试用例中,它将始终通过。
例如:
TestingServices test = Mockito.mock(TestingServices.class);
// define return value for method getUniqueId()
System.out.println("unique id is "+test.getUniqueId());
when(test.getUniqueId()).thenReturn(44);
assertEquals(test.getUniqueId(),44);
在上面的代码段assertEquals
将始终通过,无论开发人员是否更改了代码。
答案 0 :(得分:0)
在任何情况下,首先要注意你测试的是什么。
在您的代码段中,您似乎正在测试课程TestingServices
并且您不应该嘲笑这个课程,因为它的行为是您正在测试的,而不是Mockito如何工作注入您的&#39 ;假'方法回应。
实际上,在您的示例中,您正在测试Mockito是否会注入您想要的行为,并按预期工作,仅此而已。
例如:您的TestingServices
类内部有一个对象,它使用第三方API并获得响应(或MVC架构中Controller使用的DAO对象)。如果您对TestingServices
或Controller
进行单元测试,那么您不希望因为依赖而失败,并且您可以模拟系统的该部分。
Mocking让您专注于测试中的类,而不是您正在测试的过程中所需的上下文或其他类,并抽象其余组件。
有很多问题在讨论这个问题: