JUnit在成功结束后终止

时间:2016-09-01 09:01:49

标签: java junit

是否有注释可以让我的测试在一段时间后成功终止?让我们说我希望测试在10秒的运行时间后通过。

这个功能有用吗?为了一个抽象的例子,我可以说我编写了一个机器人,它必须平衡手上的一根棍子至少10秒钟,或者在一些机器学习后玩Atari Breakout一分钟(我想自动检查它是否经过训练)足够好,而不必看它)。

我知道@Test注释有一个timeout参数,但它只允许我在运行一段时间后终止测试失败。那么可以运行经过一段时间后经过的测试吗?我正在寻找类似的东西,但是使用注释(显然出于同样的原因,有timeout参数):

@Test
public void timeoutTest() {
    Date begin = new Date();
    Robot robot = new Robot(new AtariBreakout());
    robot.play();
    Date end = new Date();
    Assert.assertTrue(end.getTime() - begin.getTime() >= 10000)
}

为什么我不能使用它,并对解决方案感到满意?因为它使用了这个假设,即机器人玩游戏大约十秒钟而不是说2个小时。经过一夜的广泛测试后,我不想只用100次测试中的一次来唤醒,因为机器人编程得太好了。

修改

其中一条评论指示我采用"解决方案",这恰好是完全错误的,并且在以下代码中失败:

@Test
public void test1() throws Exception {
    Thread thread = new Thread(()->{
        while (true)
            System.out.println("HaHa");
    });
    thread.run();
    assert (thread.isAlive());
    thread.stop();
}

@Test
public void test2() throws Exception {
    while (true);
}

如果test2()test1()之后运行,它仍会产生输出,就像它仍然是runnig一样。在IntelliJ IDEA Community Edition上执行的测试。有趣的是,它在终止测试后仍然产生输出,所以唯一发生的事情 - 它只是发射了一种缓慢增长的叉形炸弹,每次测试运行时它都会增加。

0 个答案:

没有答案