[英]Unit test for void method
我需要为一些具有未知/不可预测副作用的静态 void
方法编写单元测试。 例如
public void doSth() {
try {
HttpPostUtil.sendRequest("abc", "xyz");
} catch(Exception ex) {
ex.printStackTrace();
}
}
HttpPostUtil
在另一个jar文件中。 这是我无法控制的,它将把数据发布到某些Web服务。 在这种情况下,我们可以做的测试方法是什么? (此处不允许使用PowerMockito
:()
因为它是无效方法,所以您唯一可以测试的就是行为。 在这种情况下,您别无选择
一般来说-如果很难测试->很难使用->实现不好->因此需要重构,而不是调整测试。
在测试方法时,您应该始终仅测试该方法并模拟对其他方法的其他调用。 因为其他方法应该已经在自己的测试方法中进行了测试。
在这里,如果您还想测试捕获盒,则只需进行2次测试。 使用Mockito:
@InjectMocks
private YourClass yourClass;
@Mock
private HttpPostUtil httpPostUtil;
@Test
public void testDoSthPositive() {
// Run Test
yourClass.doSth();
// Control
verify(httpPostUtil).sendRequest("abc", "xyz");
verifyNoMoreInteractions(httpPostUtil); // Optional
}
@Test
public void testDoSthNegative() {
// Preparation
NullPointerException exceptionMock = mock(NullPointerException.class);
doThrow(exceptionMock).when(httpPostUtil).sendRequest("abc", "xyz");
// Run Test
yourClass.doSth();
// Control
verify(exceptionMock).printStackTrace();
verifyNoMoreInteractions(exceptionMock, httpPostUtil); // Optional
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.