有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

socket超时的java junit测试用例

我有一个支持一些出站web服务的应用程序。我是 使用HttpClient,我需要添加一个服务超时,因为 我访问的外部URL需要很长时间才能响应(有时)。 我正在尝试添加几个junit测试用例,以确保超时正常 正确地我有类似这样的东西,其中指定的超时值是 只比配置的socket超时多一点-

@Test (timeout=6000)
public void testTimeOut() {
    notifier.performGetonUrl(getTestUrl()); 
}

我觉得这不是个好主意。有没有更好的测试我可以使用


共 (1) 个答案

  1. # 1 楼答案

    如果你想为你的代码编写一个真正的隔离单元测试,那么我同意你的测试是不合适的。如果您希望编写更多的集成测试,那么您的方法就可以了

    对于我的隔离JUnit,我创建它们,以便它们只测试被测试的类。我使用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();
         }
    

    上面假设被测类中的方法抛出异常。如果捕获到异常,那么您将以不同的方式编写上述内容