我正在嘗試實作引數化測驗,其中我有一組輸入和期望值,我想assertEquals使用JUnit. 我為此使用 JUnit 5.x 版,我將輸入值傳遞給在其他包(我正在測驗)中定義的自定義方法,并使用assertEquals方法用期望值檢查它。
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.util.Arrays;
import java.util.Collection;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.runners.Parameterized.Parameters;
class StringHelperTest {
private StringHelper helper = new StringHelper();
private String input;
private String expectedOutput;
public String getInput() {
return input;
}
public void setInput(String input) {
this.input = input;
}
public String getExpectedOutput() {
return expectedOutput;
}
public void setExpectedOutput(String expectedOutput) {
this.expectedOutput = expectedOutput;
}
@Parameters
public static Collection<String[]> testConditions() {
String[][] expectedOutputs = { { "AACD", "CD" }, { "ACD", "CD" }, { "CDEF", "CDEF" }, { "CDAA", "CDAA" } };
return Arrays.asList(expectedOutputs);
}
@ParameterizedTest
@Test
public void truncateAInFirst2Positions_A_atStart() {
assertEquals(expectedOutput, helper.truncateAInFirst2Positions(input));
}
}
在該方法testConditions()中,實際值和預期值以 2 維字串陣列expectedOutputs{{<actual_value>,<expected_value>},{...}} 的形式給出。
如何將expectedOutputs陣列傳遞給truncateAInFirst2Positions_A_atStart()方法以測驗expectedOutputs陣列中提到的所有條件
uj5u.com熱心網友回復:
使用 JUnit 5,您有 ParameterizedTest 和輸入引數的 Source,它們是方法的簡單引數。
所以你想要一個帶有這個簽名的方法:
@ParameterizedTest
//Source Annotation
void truncateAInFirst2Positions_A_atStart(String actual, String expected) {
現在您查找一個用于您的用例匹配源。當您想使用您的方法提供測驗資料時,您可以使用@MethodSource("testConditions"). 注釋中的字串指向提供測驗資料的靜態方法。測驗將執行 x 次,其中 x 是集合中的對數。字串陣列中的元素將用作方法引數。
對于像字串這樣的簡單型別,CSV 源可以更簡單、更容易閱讀:
@CsvSource({
"AACD, CD",
"ACD, CD"
})
您可以在官方檔案中檢查所有可能的來源和可能性: https ://junit.org/junit5/docs/current/user-guide/#writing-tests-parameterized-tests
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/483082.html
