单元测试mock私有方法
时间: 2023-09-10 15:15:16 浏览: 194
在单元测试中,我们可以使用反射来调用和修改私有方法或属性。但是,这种方法可能会破坏封装性,因此不太推荐使用。一种更好的方法是使用Mock框架,例如Mockito。
使用Mockito可以轻松模拟私有方法的行为。下面是一个示例代码:
```java
public class MyClass {
private int myPrivateMethod(int a, int b) {
return a + b;
}
}
@Test
public void testMyClass() throws Exception {
MyClass myClass = Mockito.spy(new MyClass());
// 模拟私有方法的返回值
Mockito.when(myClass, Mockito.method(MyClass.class, "myPrivateMethod", int.class, int.class))
.withArguments(Mockito.anyInt(), Mockito.anyInt())
.thenReturn(10);
// 调用公共方法,该方法内部调用了私有方法
int result = myClass.myPublicMethod();
// 验证私有方法被调用了一次
Mockito.verify(myClass, Mockito.times(1))
.myPrivateMethod(Mockito.anyInt(), Mockito.anyInt());
// 验证公共方法的返回值是否正确
Assert.assertEquals(result, 10);
}
```
在上面的代码中,我们通过Mockito.spy()方法创建了MyClass的一个实例,并使用Mockito.when()方法来模拟私有方法的返回值。然后,我们调用公共方法myPublicMethod(),该方法内部调用了私有方法myPrivateMethod()。最后,我们使用Mockito.verify()方法来验证私有方法被调用了一次,以及使用Assert.assertEquals()方法来验证公共方法的返回值是否正确。
阅读全文