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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JUnit中的参数化测试运行器

發(fā)布時間:2023/12/3 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JUnit中的参数化测试运行器 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

我們都有書面的單元測試,其中在一個測試中針對不同的可能的輸入輸出組合進(jìn)行測試。 讓我們以一個簡單的斐波那契數(shù)列為例來看看它是如何完成的。

以下代碼針對提到的元素數(shù)量計算斐波那契數(shù)列:

import java.math.BigInteger; import java.util.ArrayList; import java.util.List;public class Fibonacci{public List<Integer> getFiboSeries(int numberOfElements) {List<Integer> fiboSeries = new ArrayList<>(numberOfElements);for (int i = 0; i < numberOfElements; i++) {//First 2 elements are 1,1if (i == 0 || i == 1) {fiboSeries.add(i, 1);} else {int firstPrev = fiboSeries.get(i - 2);int secondPrev = fiboSeries.get(i - 1);int fiboElement = firstPrev + secondPrev;fiboSeries.add(i, fiboElement);}}return fiboSeries;}}

讓我們看看使用多個輸入值測試上述代碼的常規(guī)方法

import java.util.List; import org.junit.Test; import java.util.Arrays; import static org.junit.Assert.*;public class FibonacciCachedTest {/*** Test of getFiboSeries method, of class Fibonacci.*/@Testpublic void testGetFiboSeries() {System.out.println("getFiboSeries");int numberOfElements = 5;Fibonacci instance = new Fibonacci();List<Integer> expResult = Arrays.asList(1, 1, 2, 3, 5);List<Integer> result = instance.getFiboSeries(numberOfElements);assertEquals(expResult, result);numberOfElements = 10;expResult = Arrays.asList(1, 1, 2, 3, 5, 8, 13, 21, 34, 55);result = instance.getFiboSeries(numberOfElements);assertEquals(expResult, result);} }

因此,我們已經(jīng)能夠測試2個輸入,想象將以上內(nèi)容擴(kuò)展為更多的輸入嗎? 測試代碼中不必要的膨脹。

JUnit提供了另一個名為Parameterized Runner的Runner,它公開了一個帶有@Parameters注釋的靜態(tài)方法。 必須實現(xiàn)此方法以返回輸入和預(yù)期的輸出集合,這些集合將用于運行類中定義的測試。 讓我們看一下執(zhí)行此操作的代碼:

import java.util.Arrays; import java.util.Collection; import java.util.List; import static org.junit.Assert.assertEquals; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized;@RunWith(Parameterized.class) public class ParametrizedFiboTest {private final int number;private final List<Integer> values;public ParametrizedFiboTest(FiboInput input) {this.number = input.number;this.values = input.values;}@Parameterized.Parameterspublic static Collection<Object[]> fiboData() {return Arrays.asList(new Object[][]{{new FiboInput(1, Arrays.asList(1))},{new FiboInput(2, Arrays.asList(1, 1))},{new FiboInput(3, Arrays.asList(1, 1, 2))},{new FiboInput(4, Arrays.asList(1, 1, 2, 3))},{new FiboInput(5, Arrays.asList(1, 1, 2, 3, 5))},{new FiboInput(6, Arrays.asList(1, 1, 2, 3, 5, 8))}});}@Testpublic void testGetFiboSeries() {FibonacciUncached instance = new FibonacciUncached();List<Integer> result = instance.getFiboSeries(this.number);assertEquals(this.values, result);}}class FiboInput {public int number;public List<Integer> values;public FiboInput(int number, List<Integer> values) {this.number = number;this.values = values;} }

這樣,我們只需要在fiboData()方法中添加一個新的輸入和預(yù)期的輸出就可以了!

翻譯自: https://www.javacodegeeks.com/2014/08/parameterized-test-runner-in-junit.html

總結(jié)

以上是生活随笔為你收集整理的JUnit中的参数化测试运行器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。