在每批处理 forkmode 中使用<junit>时,设置每个测试或每个类超时的最佳方法是什么?
如果有人编写了运行时间超过 1 秒的测试,我想使生成失败,但是如果我在 perTest 模式下运行,则需要更长的时间。
我可能会编写一个自定义任务来解析 junit 报告并基于此使构建失败,但我想知道是否有人知道或可以想到更好的选择。
如果有人编写了运行时间超过 1 秒的测试,我想使生成失败,但是如果我在 perTest 模式下运行,则需要更长的时间。
我可能会编写一个自定义任务来解析 junit 报告并基于此使构建失败,但我想知道是否有人知道或可以想到更好的选择。
恢复一个老问题,因为答案没有提供一个例子。
您可以指定超时
每种测试方法:
@Test(timeout = 100) // Exception: test timed out after 100 milliseconds
public void test1() throws Exception {
Thread.sleep(200);
}
对于使用 Timeout
的测试类中的所有方法:@Rule
@Rule
public Timeout timeout = new Timeout(100);
@Test // Exception: test timed out after 100 milliseconds
public void methodTimeout() throws Exception {
Thread.sleep(200);
}
@Test
public void methodInTime() throws Exception {
Thread.sleep(50);
}
全局为使用静态运行类中的所有测试方法的总时间:Timeout
@ClassRule
@ClassRule
public static Timeout classTimeout = new Timeout(200);
@Test
public void test1() throws Exception {
Thread.sleep(150);
}
@Test // InterruptedException: sleep interrupted
public void test2() throws Exception {
Thread.sleep(100);
}
甚至可以将超时(或 )应用于整个套件中的所有类:@Rule
@ClassRule
@RunWith(Suite.class)
@SuiteClasses({ Test1.class, Test2.class})
public class SuiteWithTimeout {
@ClassRule
public static Timeout classTimeout = new Timeout(1000);
@Rule
public Timeout timeout = new Timeout(100);
}
编辑:最近已弃用超时以利用此初始化
@Rule
public Timeout timeout = new Timeout(120000, TimeUnit.MILLISECONDS);
您现在应该提供 Timeunit,因为这将为您的代码提供更精细的粒度。
如果使用 JUnit 4 和 ,则可以指定将失败的参数,该参数将失败的测试时间超过指定时间。这样做的缺点是,您必须将其添加到每个测试方法中。@Test
timeout
一个更好的选择是使用带有 org.junit.rules.Timeout 的 a
。有了这个,你可以按类(甚至在共享的超级类中)执行此操作。@Rule