如何通过junit5,对同一测试样例的不同方法进行测试?
通常使用junit5测试时,每个测试方法使用不同的测试数据。但有时我们需要使用同一测试数据对多个方法进行测试,下面介绍如何实现:
问题代码:
以下是问题的代码示例:
import org.junit.jupiter.api.*; public class sort_test3 { private final int[] testdata = init_all(); int[] init_all(){ final int[] testdata; system.out.println("before run..."); // 随机生成测试数据 int n = (int) (math.random() * 1000); system.out.println(n); testdata = new int[n]; for (int i = 0; i < n; i++) { testdata[i] = (int) (math.random() * 1000); } return testdata; } @beforeall void print(){ system.out.println(); system.out.println("--------------程序运行结束--------------"); } // 使用不同测试数据 @test //冒泡排序 public void test_mpsort() { for (int i:testdata) { system.out.println(i); } int[] mp = mysortalgorithm_main.mp_sort(testdata); system.out.println("冒泡排序结果:"); } // 使用不同测试数据 @test // 选择排序 void test_chosesort() { for (int i:testdata) { system.out.println(i); } int[] cos = mysortalgorithm_main.chose_sort(testdata); system.out.println("选择排序结果:"); } }
上面的代码中,每个测试方法都有自己的testdata。这将导致每次测试使用不同的测试数据。
解决方案:
要使用同一测试数据对多个方法进行测试,请使用@beforeeach注解。这个注解在每个测试方法之前运行,因此您可以利用它来生成测试数据并将其存储在该方法中使用。
修改后的代码如下:
import org.junit.jupiter.api.*; public class Sort_Test3 { private int[] testData; @BeforeEach void init_All(){ final int[] testData; System.out.println("before run..."); // 随机生成测试数据 int n = (int) (Math.random() * 1000); System.out.println(n); testData = new int[n]; for (int i = 0; i < n; i++) { testData[i] = (int) (Math.random() * 1000); } this.testData = testData; } @BeforeAll void print(){ System.out.println(); System.out.println("--------------程序运行结束--------------"); } // 使用相同测试数据 @Test //冒泡排序 public void test_mpSort() { for (int i:testData) { System.out.println(i); } int[] mp = MySortAlgorithm_Main.mp_sort(testData); System.out.println("冒泡排序结果:"); } // 使用相同测试数据 @Test // 选择排序 void test_choseSort() { for (int i:testData) { System.out.println(i); } int[] cos = MySortAlgorithm_Main.chose_sort(testData); System.out.println("选择排序结果:"); } }
在修改后的代码中,@beforeeach注解使用init_all()方法在每个测试方法之前生成测试数据。然后,每个测试方法都可以访问testdata变量并使用它。
此外,还可以使用@testinstance(testinstance.lifecycle.per_class)注解,这样就可以在测试类中初始化测试数据,并且可以使用this.testdata来访问它。
在IntelliJ IDEA中使用快捷键修改POM文件依赖版本时生成新的repository标签而不是直接修改版本号的原因可能与IDE的自动补全和依赖管理机制有关。以下是一些可能的原因和解决方法:依赖管理机制:IntelliJ IDEA可能会尝试从不同的存储库中查找指定版本的依赖。如果指定的版本在当前配置的存储库中找不到,IDE可能会自动添加新的存储库以确保可以下载到所需的版本。快捷键功能限制:某些快捷键可能只负责版本号的快速修改,而不处理存储库的管理。当你使用快捷键时,IDE可能会默认添加新的存储库以确
Java框架的优点和发展趋势是什么?
Java框架和F#框架在金融领域的优势
Java函数式编程对数据处理的革命性影响
JNA调用C++ DLL时如何避免异常导致JVM崩溃?
Android RecyclerView数据更新后视图不刷新,如何解决?