Spring Boot tun单元测试并行进行,其他测试在同一运行中顺序进行

bvn4nwqk  于 2022-11-05  发布在  Spring
关注(0)|答案(1)|浏览(237)

我遇到了一个问题,即如何在springBootTests和dataJpaTests一个接一个地运行时,并行运行我的 Boot Spring应用程序(Kotlin)中的所有单元测试(因为它们由于并行运行的共享上下文而失败),我的应用程序结构分为不同的模型,每个模型都有它的单元springBootTests和dataJpaTets,如下所示:

  • 模块1:
  • 单元测试1
  • 单元测试2
  • 数据jpa测试1
  • 数据jpa测试2
  • Spring Boot 试验1
  • 模块2:
  • 单元测试1
  • 单元测试2
  • 单元测试3
  • 数据jpa测试1
  • Spring Boot 试验1

我使用了www.example.com中的以下属性https://junit.org/junit5/docs/current/user-guide/#writing-tests-parallel-execution:
junit.jupiter.执行.并行.启用=真
junit.jupiter.execution.parallel.mode.default =并发//每个类中的测试并行运行
junit.jupiter.执行.并行.模式.类.默认值=并发//类并行运行
但这并没有帮助,因为没有办法从并行化中排除springBoot和dataJpa测试。
此外,我尝试在所有dataJpa和springBoot测试中使用@Execution(SAME_THREAD),但是类本身仍然并行运行,测试发生冲突

  • i使用--test *test commend一起运行所有测试
xdyibdwo

xdyibdwo1#

Spring使用Junit

默认情况下,JUnit Jupiter测试在单个线程中按顺序运行。
并行运行测试(例如,为了加快执行速度)是从5.3版开始提供的一项试验性功能
来源:https://junit.org/junit5/docs/current/user-guide/#writing-tests-parallel-execution

使用纯Junit

@Execution(ExecutionMode.CONCURRENT)
class MyTest {

    @Test
    void test1() throws InterruptedException {
        Thread.sleep(1000);
        System.out.println("Test1 " + Thread.currentThread().getName());
    }

    @Test
    void test2() throws InterruptedException {
        Thread.sleep(1000);
        System.out.println("Test 2! " + Thread.currentThread().getName());
    }
}

资料来源:

使用spring + maven + junit

第一个
资料来源:

简单测试“几乎并行”

根据this和我的测试,简单的junit测试几乎是并行执行的

public class Hello1Test {
    @Test
    public void myTest() throws Exception {
      System.out.println(new Date());
      assertTrue(true);
    }
}

mvn test -q -Dtest

注意:如果您在测试中添加了一些相关的线程,则它们将按顺序执行

@Test
  public void myTest() throws Exception {
    System.out.println(new Date());
      Thread.sleep(2000);
      assertTrue(true);
  }

排除一些测试

根据this,您可以使用**-Dtest**选择或排除特定测试

  • mvn测试-q
  • 运行所有测试
  • mvn测试-q -D测试='您好1 *'
  • 仅运行名为Hello 1 * 测试
  • 测试-q -D测试=“!你好1 *,!你好2 *”
  • 运行除Hello 1 * 和Hello 2 * 之外的所有测试

提示

相关问题