我需要为一些具有未知/不可预测副作用的静态 void
方法编写单元测试。例如
public void doSth() {
try {
HttpPostUtil.sendRequest("abc", "xyz");
} catch(Exception ex) {
ex.printStackTrace();
}
}
HttpPostUtil
在另一个jar文件中。它不受我的控制,它会将数据发布到某些Web服务。在这种情况下我们可以做什么测试方法? (PowerMockito
此处不允许:()
答案 0 :(得分:4)
因为它是无效的方法,你唯一可以测试的就是行为。在这种情况下你几乎没有选择
一般来说 - 如果难以测试 - >它很难使用 - >实施不好 - >所以它需要重构,而不是调整测试。
答案 1 :(得分:0)
在测试方法时,您应始终只测试该方法并模拟对其他方法的其他调用。因为其他方法应该在他们自己的测试方法中进行测试。
如果您还想测试捕获案例,那么您只需要进行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
}