Ril*_*ark 8 java testing junit multithreading
我想测试一些依赖于网络传输的代码.代码发出请求并提供回调 - 当请求完成时,将触发回调.我想模拟网络传输,并Thread.sleep用来模拟一些延迟...但当然这将使整个测试暂停.
到目前为止,我一直在创建新线程并CountDownLatch在整个测试中使用es来阻止测试在回调被触发之前结束.我的模拟网络对象创建一个新线程,在该线程上休眠,然后触发回调.这实际上工作得很好,但问题是回调中的任何断言错误都没有报告给原始的junit线程 - 相反,我在控制台上获得了异常文本,在那里它更难理解和使用.
我希望有:
assertEquals生成的线程输出管道传输到主JUnit输出收集器的方法,或者谢谢你的任何想法!
当我必须实现与您类似的异步机制时,我创建了AsyncTestCase保存测试错误并提供特殊方法的抽象类waitForCallback()。当异步任务在预期结果中发现错误时,会将错误放入此变量中。setter 调用notify()所使用的对象waitForCallback()。因此,当回调到达时,它会立即导致测试唤醒。然后我可以调用所有断言,包括异步任务存储的断言。
并且不要忘记对测试设置超时,以防止它们永远休眠:
@Test(timeout=10000)
public void mytest() {
callAsyncTask();
waitForAsyncTask(); // from base class
assertAsyncTaskResult(); // from base class
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5165 次 |
| 最近记录: |