概述
单元测试的对象往往是类中某一个方法。基于单元测试规范,我们希望测试是独立的,即希望其他方法不会影响我们对这一个方法的测试。但如果在这个方法调用了其他方法,那么独立性就不可避免的受到影响。
这时,我们可以使用Mockito
来帮助我们。
在使用Mockito进行单元测试时,如果你的方法调用了同一个类中的另一个方法,你可以使用Mockito.spy()方法来创建一个spy对象,它可以模拟真实对象的行为,并在需要时改变它们的行为。然后,你可以使用Mockito.doReturn()方法来指定被调用方法的返回值。
示例
下面是一个示例代码,其中假设你要测试的类是MyClass,其中有两个方法method1和method2,而method1调用了method2:
1 | public class MyClass { |
现在,我们想要编写一个单元测试,仅测试method1()方法,但是我们需要确保在测试期间不调用method2()。
在这种情况下,我们可以使用Spy对象和doReturn()方法来指定method2()方法的返回值。以下是示例代码:
1 | import org.mockito.Mockito; |
在这个测试中:
- 我们首先创建了一个
MyClass
对象,并使用Spy()方法创建一个spy
对象。 - 然后,我们使用
doReturn()
方法指定了method2()
方法的返回值为42。然后,我们调用method1()
方法,并验证它的返回值是否等于42。 - 最后,我们使用
verify()
方法来验证mock对象(spy对象)的方法被正确地调用。
Mockito
提供的功能还有很多,比如:
- 如果
method2()
是一个没有返回值的方法,则可以使用doNothing
来代替doReturn
- 如果
method2()
需要参数,则可以使用Mockito.any()
匹配任意类型的参数(不过我使用的时候,匹配int型的参数碰到些空指针问题,没有解决)