【问题标题】:junit test cases for socket timeout套接字超时的junit测试用例
【发布时间】:2011-08-30 17:44:15
【问题描述】:

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

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

我不觉得它是一个好的。我可以使用更好的测试吗?

【问题讨论】:

  • 你能告诉我们你不喜欢考试的什么地方吗?你要求改进,但你没有说具体的问题是什么。此外,如果您正在编写测试以确保正确实现 Socket 超时,那有点多余,是吗?你不应该测试其他人的代码(这是他们的责任)——你只需要测试你编写的代码。
  • 这个测试有什么问题?它没有像您预期的那样工作吗?我认为你的 JUnit 测试应该达到预期的结果,它不一定是好或坏。
  • 你是对的。也许这是一个足够好的测试。我想我不确定这是否是我能做的唯一事情来确保超时有效。我之前没有添加的一件事是我的配置值为 5000,但考虑到任何其他处理时间,我将超时设置为 6000。这是正确的方法吗?感谢您的回复。

标签: java junit httpclient


【解决方案1】:

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

对于我的隔离junit,我创建了它们,以便它们只测试被测类。我使用EasyMock 来模拟所有协作类。所以在这种情况下,我会为 httpClient 创建一个模拟。我会设置一个测试,其中模拟抛出异常,然后断言被测类按预期处理异常。下面的代码 sn-ps 可能会让你明白我的意思。

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();
     }

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

【讨论】:

    猜你喜欢
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多