JUnit - 不等待测试中的方法完成

时间:2012-04-20 07:55:12

标签: timeout junit4

我正在使用Junit 4.x来测试方法。

测试下的方法应该抛出IllegalArgumentException。该方法是一种阻塞方法(同步),它在内部使远程ssh连接执行脚本并捕获结果或抛出异常。

为了测试这个,我编写了我的JUnit测试代码,如下所示。

@Test (timeout=3000, expected=IllegalArgumentException.class)

public final void testReadFolderWithInvalidFolder() {

    final String folder = "/home/rv_nath/xxxyyyZzz";
    rfc.readFolder(folder);
}

上面的testReadFolder()方法应该在检查是否抛出预期的异常之前等待最多3秒(超时的becoz = 3000)。但它立即返回,报告测试用例失败。

任何人都可以帮我弄清楚上面出了什么问题。如果需要更多详细信息,请与我们联系。

以下是Junit的失败追踪......

  

java.lang.AssertionError:应该抛出IllegalArgumentException。       在org.junit.Assert.fail(Assert.java:91)       at com.comviva.remotefilebrowser.server.RemoteFileCaseTest.testReadFolderWithInvalidFolder(RemoteFileCaseTest.java:94)       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)       在java.lang.reflect.Method.invoke(Method.java:616)       在org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall(FrameworkMethod.java:44)       在org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)       在org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)       在org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)       在org.junit.internal.runners.statements.FailOnTimeout $ 1.run(FailOnTimeout.java:28)

Junit4超时实现中是否存在错误,或者我在这里遗漏了什么?

因为,如果我在调试模式下运行测试用例(并通过它进行跟踪,那么完成远程执行需要时间,但它确实有效并且测试用例通过)。只有当我选择运行测试用例而不是 debug 时才会出现问题。

感谢和问候, RV

1 个答案:

答案 0 :(得分:0)

对不起上述天真的问题。这是一个问题,我使用JSch库例程来读取远程数据。

只是发布在这里,所以它可能会帮助像我这样的新手用户:)

JSch库抛出了一些异常,我没有正确捕获。被调用的方法是捕获异常并立即返回。校正后,它可以正常工作。