test.timeoutSecs属性令人困惑,并且没有给出一致的结果

时间:2013-02-21 15:50:00

标签: java testing junit mule

我已经开始为我的Mule流程和处理器编写测试用例。

作为其中的一部分,我尝试在“setUp”方法中设置属性“mule.test.timeoutSecs”,以确保我的每个测试方法都没有花费更多时间。

但这显示出一些令人困惑的结果。

我已将该属性设置为3秒。

第一种测试方法的运行时间超过9秒,但仍然是成功的。

第二种方法是在3000毫秒后超时。

第三种测试方法未能抛出异常

org.mule.retry.RetryPolicyExhaustedException: Could not create Transport. Reason: javax.management.InstanceAlreadyExistsException: org.apache.activemq:BrokerName=localhost,Type=Broker
at org.mule.retry.policies.AbstractPolicyTemplate.execute(AbstractPolicyTemplate.java:105)
.....
Caused by: javax.jms.JMSException: Could not create Transport. Reason: javax.management.InstanceAlreadyExistsException: 

第四种方法是在3000毫秒后超时。

请告知我在这里遗失了什么。

下图显示了测试摘要以及每种测试方法的时间。

Snapshot of my test run

2 个答案:

答案 0 :(得分:3)

使用org.mule.tck.junit4.FunctionalTestCase时,在测试类构造函数或mule.test.timeoutSecs静态方法中设置@BeforeClass

答案 1 :(得分:1)

Eclipse包括在该测试中花费在设置/拆卸上花费的时间。如果您有@Before / @After,它将包含在测试时间内。因此,如果您的设置需要很长时间才能进行第一次测试,那么这将包括在内。

但是,超时仅适用于测试方法本身,而不适用于@Before / @After

此外,IIRC如果您有BeforeClass / AfterClass这将包括在时间中(但仅限于第一次/最后一次测试)。

要测试这一点,在测试中,您可以添加以下行:

@Test public void testMe() {
  long now = new Date().getTime();

  // test
  System.out.println("time taken =" + (new Date().getTime() - now) + " millis");
}

这会告诉您花费的时间是否真的在@Before / @After