【问题标题】:The order of execution of integration tests does not work in Srping Boot ( [duplicate]集成测试的执行顺序在 Spring Boot 中不起作用([重复]
【发布时间】:2021-04-05 20:26:16
【问题描述】:

我使用 Java 11(我不是在寻找类中方法的执行顺序。

网站上没有回答我问题的帖子


    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.testcontainers</groupId>
            <artifactId>junit-jupiter</artifactId>
            <scope>test</scope>
        </dependency>
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@Suite.SuiteClasses({TestFirst.class,
        TestSecond.class,
        AdminTest.class})
public class ApplicationTests {

}

public class TestFirst extends ApplicationTests {

@Test
void run(){
}
}

public class TestSecond extends ApplicationTests {

@Test
void run(){
}

}

public class AdminTest extends ApplicationTests {

@Test
void run(){
}

}

我使用注释 @Suite.SuiteClasses

我假设测试类应该一个一个地运行。未遵循发射顺序。每个类都位于自己的目录中。

对于 Spring,它就像一个单独的集成测试。

如何让类按照我定义的顺序执行?

也许还有另一种方法?

【问题讨论】:

  • 测试用例彼此独立运行。对于每个测试用例,一旦执行测试用例,就会创建和转储单独的数据库。
  • 1.我们不使用不同的 Textcontainers 来提升数据库。我们需要一个数据库来处理所有测试。 2. 我不认为我的问题是重复的。我不需要方法的顺序,我需要的是运行测试类的顺序——这很重要。

标签: java junit5 spring-boot-test


【解决方案1】:

故意未定义测试的运行顺序。每个测试都应该设置它需要的资源并在之后进行清理。各个 @Test 的运行顺序无关紧要。

您可以使用@Before 和@After 注释对每个测试进行一些设置和清理。还有@BeforeAll 和@AfterAll 用于在类级别设置/清理(它们在类中的所有测试之前/之后/任何测试之前执行)。

原则是单元测试是完全独立的,可以独立于任何其他测试运行。您应该能够选择一个测试并运行它。

【讨论】:

  • 那里有独立性。但例如,我不需要多次填充模型来阅读它。例如,一个类检查模型的创建(然后我需要读取创建的模型)。另一个类读取模型数据。避免进行 2 次记录。测试有 300 多个,而且很重,而且还会更多。为每个模块提升一个容器的成本很高。
  • 有时理论原理与实际不符。对于那些可以共享资源而不互相干扰的测试,你可以将它们放在同一个类中,并使用@BeforeAll(或@BeforeClass)来设置共享资源。测试本身仍然需要能够以任意顺序运行,但不必每次都设置资源。
  • 那么就是几千行了。
  • 另外,我发现了一个泛型类型的抽象类,继承很深。类本身有 1000 多行。这一切都需要重做。许多其他的都是从这个抽象类继承的,等等。在我的情况下,它不可能像你说的那样做。大量重复代码,以及大量用于测试的重要代码。
  • 在不了解您的代码的情况下很难给出任何具体的建议。一般来说,我会说单元测试应该尽可能地测试小的不同组件。编写这样的测试当然很耗时,但非常有价值。我能给出的最佳建议是尽可能遵循单元测试设计原则,即使这意味着某些测试会很繁重。
猜你喜欢
  • 2017-04-15
  • 2019-08-10
  • 1970-01-01
  • 2022-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-05
相关资源
最近更新 更多