我有一个支持一些出站Web服务的应用程序。我是 使用HttpClient我需要添加一个服务时间,因为其中一个 我访问的外部URL需要很长时间才能响应(有时)。 我正在尝试添加一些junit测试用例以确保我的超时工作正常 正常。我有这样的东西,指定的超时值是 比配置的套接字超时更多 -
@Test (timeout=6000)
public void testTimeOut() {
notifier.performGetonUrl(getTestUrl());
}
我觉得它不是一个好人。我可以使用更好的测试吗?
答案 0 :(得分:1)
如果您要编写代码的真正隔离单元测试,那么我同意您的测试不合适。如果您希望编写更多集成测试,那么您的方法很好。
对于我的隔离junits,我创建它们,以便它们只测试被测试的类。我使用EasyMock来模拟所有合作类。所以在这种情况下我会为httpClient创建一个模拟器。我会设置一个测试,其中模拟抛出异常,然后断言被测试的类按预期处理异常。下面的代码片段可能会让您了解我的意思。
private DefaultHttpClient httpClient;
private ClassUnderTest classUnderTest;
@Before
public void setUpTest() {
httpClient = createMock(DefaultHttpClient.class);
@Test
public void performARequestThatThrowsAnIOException() {
expect(httpClient.execute(post)).andThrow(iOException);
replayAll();
try {
classUnderTest.executeMethodUnderTest();
fail("This test should throw an IOException.");
} catch (IOException e){
verifyAll();
}
以上假设被测试类中的方法抛出异常。如果异常被捕获,那么您将以不同的方式编写上述内容。