JUnit5学习之八:综合进阶(终篇) (4)

由于实践的是同一个类同一个方法多次执行的并发,因此上述配置中,类级多线程开关和方法级多线程开关都选择了"同一个线程",也就是说不需要并发执行多个类或者多个方法,请您根据自己的需求自行调整;

关于并发策略,这里选择的是动态调整,我这里是i5-8400处理器,拥有六核心六线程,稍后咱们看看执行效果与这个硬件配置是否有关系;

接下来编写测试代码,先写一个单线程执行的,可见@Execution的值为SAME_THREAD,限制了重复测试时在同一个线程内顺序执行:

package com.bolingcavalry.advanced.service.impl; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.*; import org.junit.jupiter.api.parallel.Execution; import org.junit.jupiter.api.parallel.ExecutionMode; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import org.springframework.boot.test.context.SpringBootTest; import static org.junit.jupiter.api.Assertions.assertTrue; @SpringBootTest @Slf4j @TestMethodOrder(MethodOrderer.OrderAnnotation.class) class ParallelExecutionTest { @Order(1) @Execution(ExecutionMode.SAME_THREAD) @DisplayName("单线程执行10次") @RepeatedTest(value = 10,) void sameThreadTest(TestInfo testInfo, RepetitionInfo repetitionInfo) { log.info("测试方法 [{}],当前第[{}]次,共[{}]次", testInfo.getTestMethod().get().getName(), repetitionInfo.getCurrentRepetition(), repetitionInfo.getTotalRepetitions()); } }

执行结果如下,可见确实是单线程:

在这里插入图片描述

重复测试时并发执行的代码如下,@Execution的值为CONCURRENT:

@Order(2) @Execution(ExecutionMode.CONCURRENT) @DisplayName("多线程执行10次") @RepeatedTest(value = 10,) void concurrentTest(TestInfo testInfo, RepetitionInfo repetitionInfo) { log.info("测试方法 [{}],当前第[{}]次,共[{}]次", testInfo.getTestMethod().get().getName(), repetitionInfo.getCurrentRepetition(), repetitionInfo.getTotalRepetitions()); }

执行结果如下,从红框1可见顺序已经乱了,从红框2可见十次测试方法是在五个线程中执行的:

在这里插入图片描述


11. 最后是参数化测试的演示,也可以设置为多线程并行执行:

@Order(3) @Execution(ExecutionMode.CONCURRENT) @DisplayName("多个int型入参") @ParameterizedTest @ValueSource(ints = { 1,2,3,4,5,6,7,8,9,0 }) void intsTest(int candidate) { log.info("ints [{}]", candidate); }

执行结果如下图,可见也是5个线程并行执行的:

在这里插入图片描述

结束语

至此,《JUnit5学习》系列已经全部完成,感谢您的耐心阅读,希望这个原创系列能够带给您一些有用的信息,为您的单元测试提供一些参考,如果发现文章有错误,期待您能指点一二;

你不孤单,欣宸原创一路相伴

Java系列

Spring系列

Docker系列

kubernetes系列

数据库+中间件系列

DevOps系列

欢迎关注公众号:程序员欣宸

微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界...
https://github.com/zq2599/blog_demos

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wppfgd.html