美文网首页程序员
JUnit按序运行测试(@FixMethodOrder无效)

JUnit按序运行测试(@FixMethodOrder无效)

作者: Lyudmilalala | 来源:发表于2020-07-14 13:39 被阅读0次

前两天用SpringBoot做新项目,发现JUnit用@FixMethodOrder指定测试顺序无效

package com.task;
import java.util.LinkedList;
import java.util.List;

import org.junit.jupiter.api.Assertions;
import org.junit.FixMethodOrder;
import org.junit.runners.MethodSorters;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import com.task.entity.Platform;
import com.task.repository.PlatformRepository;
import junit.framework.TestCase;

@DataJpaTest
@FixMethodOrder(MethodSorters.JVM)
class PlatformRepositoryTest extends TestCase {

    @Autowired
    private PlatformRepository platformRepository;
    
    //Hope to run in order of creation, selection, and deletion

    @Test
    public void createTest() {
        System.out.println("============ Enter PlatformRepository createTest ===========");
        System.out.println("============ Exit PlatformRepository createTest ===========");
    }
    
    @Test
    public void selectTest() {
        System.out.println("============ Enter PlatformRepository selectTest ===========");
        System.out.println("============ Exit PlatformRepository selectTest ===========");
    }

    @Test
    public void deleteTest() {
        System.out.println("============ Enter PlatformRepository deleteTest ===========");
        System.out.println("============ Exit PlatformRepository deleteTest ===========");
    }
}

结果

============ Enter PlatformRepository selectTest ===========
============ Exit PlatformRepository selectTest ===========
============ Enter PlatformRepository deleteTest ===========
============ Exit PlatformRepository deleteTest ===========
============ Enter PlatformRepository createTest ===========
============ Exit PlatformRepository createTest ===========

百度上有人指出可能是Junit版本问题,但是没有具体信息
总之先查看一下pom.xml里junit的版本依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

查阅资料后发现这个依赖表示junit5, junit4是没有<exclusions>部分的,或者像下面这样

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
            <version>4.12</version>
        </dependency>

查阅官网也可以证实MethodSorters是junit4下的关键词
junit4 - MethodSorters
那么我们现在要做的就是查询junit5该怎么进行测试排序
百度这方面资料比较少,幸运的是Stackoverflow一下就找到了,应该使用@TestMethodOrder
Stackoverflow - Junit's @Testmethodorder annotation not working
调整之后排序有效

package com.task;
import java.util.LinkedList;
import java.util.List;

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;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import com.task.entity.Platform;
import com.task.repository.PlatformRepository;
import junit.framework.TestCase;

@DataJpaTest
@TestMethodOrder(OrderAnnotation.class)
class PlatformRepositoryTest extends TestCase {

    @Autowired
    private PlatformRepository platformRepository;
    
    //Hope to run in order of creation, selection, and deletion

    @Test
    @Order(1)
    public void createTest() {
        System.out.println("============ Enter PlatformRepository createTest ===========");
        System.out.println("============ Exit PlatformRepository createTest ===========");
    }
    
    @Test
    @Order(2)
    public void selectTest() {
        System.out.println("============ Enter PlatformRepository selectTest ===========");
        System.out.println("============ Exit PlatformRepository selectTest ===========");
    }

    @Test
    @Order(3)
    public void deleteTest() {
        System.out.println("============ Enter PlatformRepository deleteTest ===========");
        System.out.println("============ Exit PlatformRepository deleteTest ===========");
    }
}

结果

============ Enter PlatformRepository createTest ===========
============ Exit PlatformRepository createTest ===========
============ Enter PlatformRepository selectTest ===========
============ Exit PlatformRepository selectTest ===========
============ Enter PlatformRepository deleteTest ===========
============ Exit PlatformRepository deleteTest ===========

相关文章

网友评论

    本文标题:JUnit按序运行测试(@FixMethodOrder无效)

    本文链接:https://www.haomeiwen.com/subject/apixhktx.html