2

我有几个 DAO 单元测试类,我想使用 TestNG 一起运行,但是 TestNG 尝试并行运行它们,这会导致一些回滚失败。虽然我想按顺序运行我的单元测试类,但我还希望能够指定TestNG 在运行下一个测试之前必须等待的最短时间。这是可以实现的吗?

PS我知道可以告诉TestNG在SingleThread的测试类中运行所有测试,无论如何我都可以使用组指定方法调用的顺序,所以这可能不是问题。

4

3 回答 3

0

两个测试之间的硬依赖又如何呢?如果你这样写:

@Test
public void test1() { ... }

@Test(dependsOnMethods = "test1", alwaysRun = true)
public void test2() { ... }

thentest2将始终在之后 test1运行。

不要忘记alwaysRun = true,否则如果test1失败,test2将被跳过!

于 2012-05-14T14:49:13.190 回答
0
  1. 如果您不想并行运行类,则需要将套件的并行属性指定为 false。默认情况下,它是错误的。所以我认为它应该默认按顺序运行,除非你在调用测试的方式上有一些变化。

  2. 为了在你的类之间添加一点延迟,你可以在一个用 @AfterClass 注释的方法中添加你的延迟逻辑。AFAIK testng 没有办法在 testng xml 或命令行中指定它。有一个 timeout 属性,但更多的是用于超时测试,可能不是您想要的。

要在测试之间添加延迟,即 xml 中的测试标签,那么您可以尝试实现 ITestListener - onFinish 方法,您可以在其中添加延迟代码。它在每个<test>. 如果在每个测试用例之后都需要延迟,则在 IInvokedMethodListener - AfterInvocation() 中实现延迟代码,该代码在每个测试方法运行后运行。然后,您需要在调用套件时指定侦听器。

希望能帮助到你..

于 2012-05-15T06:06:48.540 回答
0

以下是我在一些测试中使用的。

首先,定义这样的实用方法:

// make thread sleep a while, so that reduce effect to subsequence operation if any shared resource,
private void delay(long milliseconds) throws InterruptedException {
    Thread.sleep(milliseconds);
}

private void delay() throws InterruptedException {
    delay(500);
}

然后,在测试方法的末尾或开头调用该方法。

例如

@Test
public void testCopyViaTransfer() throws IOException, InterruptedException {
    copyViaTransfer(new File(sourcePath), new File(targetPath));
    delay();
} 
于 2016-03-17T19:09:07.087 回答