2

我已经开始为我的 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 毫秒后超时。

如果我在这里遗漏任何东西,请告知。

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

我的测试运行快照

4

2 回答 2

3

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

于 2013-02-21T17:46:50.320 回答
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中。

于 2013-02-21T16:50:26.867 回答