日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

参数化测试 junit_使用JUnit 5进行更清洁的参数化测试

發布時間:2023/12/3 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 参数化测试 junit_使用JUnit 5进行更清洁的参数化测试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參數化測試 junit

參數化單元測試的總體思路是對不同的數據運行相同的測試方法。 在JUnit 4中創建參數化測試遠非完美。 現有體系結構存在許多問題:將參數定義為類字段,并需要使用構造函數來創建它們,參數化和非參數化測試不能混合在一個測試類中,并且內置數據源非常有限。 幸運的是,所有這些都在JUnit 5中得到了改進!

注意:作為JUnit 4參數化測試的替代方法,您可以使用JUnitParams庫來解決我提到的許多問題(請在此處查看有關JUnitParams的博客文章: http : //blog.codeleak.pl/2013/12/parametrized-junit- tests-with.html )。

如何開始?

要開始在Junit 5中進行參數化測試,您需要向項目中添加所需的依賴項:向項目添加org.junit.jupiter:junit-jupiter-params:${junitJupiterVersion}依賴項以使用參數化測試,參數提供程序和轉換器。

SUT –被測系統

我創建的所有示例都在測試FizzBu??zz類:

public class FizzBuzz {private static final int THREE = 3;private static final int FIVE = 5;public String calculate(int number) {if (isDivisibleBy(number, THREE) && isDivisibleBy(number, FIVE)) {return "FizzBuzz";}if (isDivisibleBy(number, THREE)) {return "Fizz";}if (isDivisibleBy(number, FIVE)) {return "Buzz";}return String.valueOf(number);}private static boolean isDivisibleBy(int dividend, int divisor) {return dividend % divisor == 0;} }

盡管FizzBu??zz非常簡單,但是它也可以用于演示更高級的單元測試技術,例如實現參數化測試。

我在JUnit 5中的第一個參數化測試

要在JUnit 5中創建參數化測試,請使用@org.junit.jupiter.params.ParameterizedTest (而不是@Test )注釋測試方法,并提供參數來源:

@ParameterizedTest(name = "{index} => calculate({0})") @ValueSource(ints = {1, 2, 4, 7, 11, 13, 14}) public void returnsNumberForNumberNotDivisibleByThreeAndFive(int number, TestInfo testInfo) {assertThat(fizzBuzz.calculate(number)).isEqualTo("" + number); }

注釋具有可選的name屬性,用于自定義調用顯示名稱。 可用的模板變量:{index}->當前調用索引(從1開始),{arguments}->完整的,用逗號分隔的參數列表,{0},{1},…->一個單獨的參數。

在此示例中, @org.junit.jupiter.params.provider.ValueSource提供對整數文字值數組的訪問。 必須在此批注中提供一種輸入類型(字符串,實例,長整型或雙精度型)。

我還提供了由org.junit.jupiter.api.extension.ParameterResolver解析的其他參數。 請注意,由參數源解析的方法參數需要在參數列表中排在首位。

更多論點來源

@MethodSource

@ParameterizedTest(name = "{index} => calculate({0})") @MethodSource(names = {"divisibleByThree", "divisibleByThreeButNotFive"}) void returnFizzForNumberDivisibleByThree(int number) {assertThat(fizzBuzz.calculate(number)).isEqualTo("Fizz"); }

@org.junit.jupiter.params.provider.MethodSource引用返回自變量源的方法(1個或更多)。 在此示例中,有兩種方法:

private static Stream<Integer> divisibleByThree() {int[] ints = new int[]{18, 21};return Stream.of(3, 6, 9, 12); }// The returned array will be converted to a Stream private static String[] divisibleByThreeButNotFive() {return new String[]{"18", "21"}; }

提供參數的方法必須是靜態的,不能包含任何參數,并且必須返回Stream,Iterable,Iterator或數組。 您可能會注意到, divisibleByThreeButNotFive()方法返回一個字符串數組。 由于內置了隱式參數轉換器,因此可以很好地工作。 當參數源是CSV時(這在下面有更多說明),這確實很有用。 此外,可以使用自定義參數轉換器來轉換參數。

要解析多個參數,方法源將返回org.junit.jupiter.params.provider.Arguments實例流( org.junit.jupiter.params.provider.ObjectArrayArguments ):

@ParameterizedTest(name = "{index} => calculate({0}) should return {1}") @MethodSource(names = {"fizzBuzz"}) void fizzBuzz(int number, String expectedResult) {assertThat(fizzBuzz.calculate(number)).isEqualTo(expectedResult); }private static Stream<Arguments> fizzBuzz() {return Stream.of(ObjectArrayArguments.create(1, "1"),ObjectArrayArguments.create(2, "2"),ObjectArrayArguments.create(3, "Fizz"),ObjectArrayArguments.create(4, "4"),ObjectArrayArguments.create(5, "Buzz"),ObjectArrayArguments.create(6, "Fizz"),ObjectArrayArguments.create(7, "7"),ObjectArrayArguments.create(8, "8"),ObjectArrayArguments.create(9, "Fizz"),ObjectArrayArguments.create(15, "FizzBuzz")); }

@CsvFileSource

提供參數源的另一種非常有趣的方法是org.junit.jupiter.params.provider.CsvFileSource ,它從類路徑中的多個CSV文件之一中提供參數:

@ParameterizedTest(name = "{index} => calculate({0}) should return {1}") @CsvFileSource(resources = {"/fizzbuzz/fizzbuzz_1.csv", "/fizzbuzz/fizzbuzz_2.csv"}, delimiter = ';') void fizzBuzzCsv(int number, String expectedResult) {assertThat(fizzBuzz.calculate(number)).isEqualTo(expectedResult); }

其他論點

  • @EnumSource提供了使用Enum常量的便捷方法。
  • @CsvSource允許您將參數列表表示為以逗號分隔的值
  • @ArgumentsSource可用于指定自定義,可重用的參數提供程序。

享受JUnit 5中的參數化測試!

資源資源

可以在GitHub上找到本文中介紹的所有示例: https : //github.com/kolorobot/unit-testing-demo

查看官方的JUnit 5文檔以了解更多信息: http : //junit.org/junit5/docs/current/user-guide/#writing-tests-parameterized-tests

翻譯自: https://www.javacodegeeks.com/2017/06/cleaner-parameterized-tests-junit-5.html

參數化測試 junit

總結

以上是生活随笔為你收集整理的参数化测试 junit_使用JUnit 5进行更清洁的参数化测试的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。