在"Camel in action"书中,我找到了这个测试示例:
@Test
public void testMoveFile() throws Exception {
// create a new file in the inbox folder with the name hello.txt and containing Hello World as body
template.sendBodyAndHeader("file://target/inbox", "Hello World", Exchange.FILE_NAME, "hello.txt");
// wait a while to let the file be moved
Thread.sleep(2000);
// test the file was moved
File target = new File("target/outbox/hello.txt");
assertTrue("File should have been moved", target.exists());
// test that its content is correct as well
String content = context.getTypeConverter().convertTo(String.class, target);
assertEquals("Hello World", content);
}
显然这是一个集成测试 - 我们测试多个单元,但是:
答案 0 :(得分:1)
我同意Big Al。你不应该使用Thread.sleep如果你可以避免它(如果你这样做)(在测试前端行为时这种情况很常见)你肯定想循环一段时间而如果它没有在X中完成则会失败毫秒。
在我看来,使用线程休眠往往会创建一个脆弱或缓慢的测试套件。您无法保证环境是否会在特定时间内运行测试。
另外,我建议您不要使用单元测试来检查文件是否已被移动。这意味着您的测试依赖于文件系统是一个特定的状态,并且在技术上不是测试最小的东西。
单元测试必须按照定义: -
最好使用Cucumbers来测试此行为或其他更高级别的测试。或者模拟与文件系统的交互。
答案 1 :(得分:1)
它的鸡肉和鸡蛋。正如Camel in Action一书中所述,稍后我们将向您介绍NotifyBuilder,它允许您在没有线程睡眠的情况下进行测试。见第6章,第6.4.2节。
Camel网站上还有一些关于NotifyBuilder的详细信息 http://camel.apache.org/notifybuilder.html
答案 2 :(得分:0)
我会设置一个循环,在没有睡觉的情况下进行第一次检查(避免不必要的睡眠);如果文件尚不存在,则睡眠并重复最多N次,如果尚未在足够的时间内创建,则会失败。
答案 3 :(得分:-1)