当前位置: 首页 > 知识库问答 >
问题:

对于任何测试运行,只运行一次JUnit setup和teardown

太叔昊穹
2023-03-14

我可以通过在测试套件中使用@BeForeClass和@AfterClass注释来实现这一点,但这限制了我只能在套件中运行测试。如果我想在套件之外运行一个单独的测试,它不会运行套件setup和teardown方法。同样,如果我想运行一个单独的测试方法(通过IDE),它不会从套件中运行设置和拆卸。

是否有一种方法可以设置JUnit测试,以便无论它们是如何运行的,通过一个套件、一个测试用例或一个单独的方法,它们总是在运行任何东西之前只运行一次设置方法,并且在每个测试执行后只运行一次teardown?让所有测试用例都用静态初始化器扩展抽象类可以解决设置问题,但不能解决拆卸问题。

共有1个答案

终翰学
2023-03-14

我能够用两种不同的方法来完成我需要的事情。我更希望只有一种方法有效,但这就行了...

我有一个实现TestRunFinished的自定义RunListener类:

public class MyRunListener extends RunListener
{
    @Override
    public void testRunFinished(Result result) throws Exception
    {
        //Do whatever teardown needs to be done
    }
}

然后,我有了一个自定义BlockJUnit4ClassRunner类,它具有以下run()方法:

private static boolean listenerAdded = false;
@Override 
public void run(RunNotifier notifier)
{
    //listenerAdded required or else the listener will be added once for every test case, and testRunFinished will be run multiple times
    if(!listenerAdded)
    {
        listenerAdded = true;
        notifier.addListener(new MyRunListener());
    }
    super.run(notifier);
}
@RunWith(MyRunner.class)
@RunWith(MyRunner.class)
public class AbstractTestCase
{
    private static boolean setupDone = false;
    static
    {
        if(!setupDone)
        {
            setupDone = true;
            //Do whatever setup needs to be done
        }
    }
...
 类似资料:
  • 我希望一个进程在我启动我的网络服务后运行,然后每隔30分钟左右运行一次(我现在用较小的延迟测试它,只是为了看看它是否工作),但是我的进程从来不会运行超过一次。我做错了什么? 这是我的密码:

  • 是否可以只在指定的时间安排一次Spring服务方法?例如,当前时间是下午2点,但当我点击action按钮时,我希望我的服务方法在晚上8点开始。我很熟悉@Schedured注释,我不确定如何编写不定期运行的cron表达式。这个每天晚上8点触发。 有什么建议吗?

  • 参考:https://docs.microsoft.com/en-us/rest/api/azure/devops/test/runs/list?view=azure-devops-rest-5.1#通用-示例

  • 我想用Jest做一个测试。 我使用

  • 问题内容: 运行时,输出: 但是,当我再次运行后,所有测试都通过了。 仅当我重置mysql数据库然后首次运行时,测试才会失败。 对于每个请求,我都会做一个请求,以确保在数据库中创建了数据。 谁能帮助我确保测试按顺序运行?那是请求在请求之前运行? 问题答案: 您不能/不应该依赖测试执行顺序。没有定义测试的执行顺序,并且使用测试标志可以排除测试的运行,因此您无法保证它们将完全运行。 例如,以下命令将仅

  • 我试图创建一个测试套件,在套件开始时运行Spring Boot一次。我的工作原理是,每个测试用例都有@SpringBootTest,但我只希望在测试套件中有@SpringBootTest。 我确实看到了这个,但没有提到“RunWith Suite”。班

  • 问题内容: 我要延迟设置某项倒计时计时器的时间,该计时器将在一定时间后“做某事”。 我希望我的程序的其余部分在等待时继续运行,所以我尝试制作自己的程序,其中包含一分钟的延迟: 尽管这种方法行之有效,但似乎应该有一种更好的方法。 我不需要任何复杂的东西。我只想在一定时间后做一件事情,而让程序的其余部分仍然运行。 我应该如何安排一次任务来“做某事”? 问题答案: 虽然过去曾经是安排未来任务的好方法,但