Junit单元测试简单使用

第一步:pom文件引入相关文件

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>${spring.boot.version}</version>
            <scope>test</scope>
</dependency>

第二步:创建测试类并添加@SpringBootTest注解,如果不需要注入springbean可以不加入注解(比如下文的foodRest)

第三步:编写相关测试方法并在方法上加上@Test注解,@DisplayName注解可以取一个测试别名

复制代码
@SpringBootTest
@Slf4jpublic class FoodRestTest {
    @Autowired
    private FoodRest foodRest;

    @Test
    @DisplayName("新增食物")
    void add() {
        FoodDTO foodDTO = new FoodDTO();
        foodDTO.setType("面食");
        foodDTO.setName("炸酱面");
        Result<FoodVO> add = foodRest.add(foodDTO);
        System.out.println(add.getData().toString());
        System.out.println(System.currentTimeMillis());
    }

    @Test
    @DisplayName("获取所有食物")
    void findAll() {
        Result<List<FoodVO>> all = foodRest.findAll();
        for (FoodVO datum : all.getData()) {
            System.out.println(datum);
        }
        System.out.println(System.currentTimeMillis());
    }
}
复制代码

运行结果

 

 

在默认情况下,运行顺序是按照方法名的hashcode顺序执行的,先执行findAll(),再执行add(),但是有的时候我们需要按顺序执行,比如上图,却没有拿到数据,所有我们需要先执行add(),再去执行findAll()。

我们有多种方法实现:

  1.  按执行顺序重新给测试方法命名(不推荐)
  2. 设置方法执行顺序,添加@TestMethodOrder(value=“”)注解,有以下选项:
    • MethodOrderer.OrderAnnotation.class(推荐),配合@Order注解使用,根据Order的优先级执行,值越小优先级越大
    • MethodOrderer.MethodName.class,根据方法名称字典顺序执行
    • MethodOrderer.DisplayName.class,根据别名字典顺序执行
    • MethodOrderer.Random.class,随机顺序执行
    • 自定义MethodOrderer接口的实现类,重写orderMethods方法
      public class MyMethodOrderer implements MethodOrderer {
          @Override
          public void orderMethods(MethodOrdererContext methodOrdererContext) {
              List<? extends MethodDescriptor> methodDescriptors = methodOrdererContext.getMethodDescriptors();
              //自定义排序逻辑
              System.out.println();
          }
      }
复制代码
@SpringBootTest
@Slf4j
@TestMethodOrder(value = MethodOrderer.OrderAnnotation.class)
public class FoodRestTest {
    @Autowired
    private FoodRest foodRest;

    @Test
    @Order(1)
    @DisplayName("新增食物")
    void add() {
        FoodDTO foodDTO = new FoodDTO();
        foodDTO.setType("面食");
        foodDTO.setName("炸酱面");
        Result<FoodVO> add = foodRest.add(foodDTO);
        System.out.println(add.getData().toString());
        System.out.println(System.currentTimeMillis());
    }

    @Test
    @Order(2)
    @DisplayName("获取所有食物")
    void findAll() {
        Result<List<FoodVO>> all = foodRest.findAll();
        for (FoodVO datum : all.getData()) {
            System.out.println(datum);
        }
        System.out.println(System.currentTimeMillis());
    }
}
复制代码

运行结果,按照顺序执行,我们就取到对应的数据了

 

posted @   雪月风殇  阅读(233)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
点击右上角即可分享
微信分享提示