2012-04-20 118 views
0

我正在使用Junit 4.x来测试方法。JUnit - 不等待测试方法完成

测试下的方法预计会抛出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: Should have thrown IllegalArgumentException. at 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) at java.lang.reflect.Method.invoke(Method.java:616) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) at org.junit.internal.runners.statements.FailOnTimeout$1.run(FailOnTimeout.java:28)

是否有Junit4超时实现中的错误,还是我失去了一些东西?因为,如果我在调试模式下运行测试用例(并通过它进行跟踪,那么完成远程执行需要一定的时间,但它确实可行并且测试用例通过)。如果我选择运行这个测试用例,而不是调试那么只会出现这个问题。

感谢和问候, RV

回答

0

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

刚刚张贴在这里,所以它可以帮助新手用户像我一样:)

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