JUnit 的@TestMethodOrder注释不起作用

2022-09-02 00:42:12

我在进行集成测试时遇到问题

import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.TestMethodOrder;
import org.junit.jupiter.api.MethodOrderer.OrderAnnotation;

@SpringBootTest
@ActiveProfiles("test")
@TestMethodOrder(OrderAnnotation.class)
public class FooServiceIT {
    @Test
    @Order(1)
    void testUploadSuccess() { ... }
    @Test
    @Order(2)
    void testDownloadSuccess() { ... }
    @Test
    @Order(3)
    void testDeleteSuccess() { ... }
}

当我运行测试时,我期望执行顺序为1,2,3,但由于某种原因,实际执行顺序为2,3,1。

Tbh,我不知道为什么注释不起作用。我正在使用Spring Boot 2.1.3和JUnit 5.4。


答案 1

您需要正确配置 IDE。

要求

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-engine</artifactId>
    <version>5.4.0</version>
</dependency>

不要使用提供 IDE 的 JUnit 5。如果将其添加为库,您将获得:

No tests found for with test runner 'JUnit 5' 
==================== and this exception ===================
TestEngine with ID 'junit-vintage' failed to discover tests
java.lang.SecurityException: class "org.junit.jupiter.api.TestMethodOrder"'s signer information does not match signer information of other classes in the same package

因此,只需仅包含提到的依赖项,您的代码将按预期工作:

import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class FooServiceIT {

    @Test
    @Order(1)
    public void testUploadSuccess() {
        System.out.println("1");
    }

    @Test
    @Order(2)
    public void testDownloadSuccess() {
        System.out.println("2");
    }

    @Test
    @Order(3)
    public void testDeleteSuccess() {
        System.out.println("3");
    }
}

JUnit 结果:

1
2
3

答案 2

我也遇到过同样的问题。但是,我发现问题究竟在我的案件上。错误地导入“订单”类。

错的那个

import org.springframework.core.annotation.Order;

右一

*import org.junit.jupiter.api.Order;*

另外,请正确导入验证以下五个类

import org.junit.jupiter.api.Assertions;

import org.junit.jupiter.api.MethodOrderer.OrderAnnotation;

import org.junit.jupiter.api.Order;

import org.junit.jupiter.api.Test;

import org.junit.jupiter.api.TestMethodOrder;

推荐