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()。
我们有多种方法实现:
- 按执行顺序重新给测试方法命名(不推荐)
- 设置方法执行顺序,添加@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()); } }
运行结果,按照顺序执行,我们就取到对应的数据了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!