@RunWith(JUnitParamsRunner.class)
public class MySimpleTest {
private MyRec rec;
private Matrix matrix;
@Before
public void createRecognizerBeforeEveryExecution() {
rec = new MyRec();
matrix = MatrixUtils.createMatrixWithValues();
}
public static Iterable<Object[]> data() {
return Arrays.asList(
new Object[]{"expectedvalue1", "input1"},
new Object[]{"expectedvalue2", "input2"}
);
}
@Test
@Parameters(method = "data")
public void test1(String output, String input) {
rec.fun1(matrix);
assertEquals(output, rec.someFunction(input));
}
public static Iterable<Object[]> data2() {
return Arrays.asList(
new Object[]{"expectedothervalue1", "input1"},
new Object[]{"expectedothervalue2", "input2"}
);
}
@Test
@Parameters(method = "data2")
public void test2(String output, String input) {
rec.fun1(matrix);
rec.fun2(matrix);
assertEquals(output, rec.someFunction(input));
}
}
我試圖找出什麼是進行此測試的正確方法。我想使用參數化測試,因爲這非常方便。所以你可以看到,在每個測試函數中,我都調用了一些函數(fun1
和fun2
)。但每次測試只需要調用一次(例如每次參數化測試執行之前)。JUnitParams - 在測試之前執行單獨的方法
有什麼辦法告訴JUnitParams它應該在執行所有參數化測試之前執行其他函數嗎?
我不能使用@Before
註釋,因爲您可以在test1
中看到我沒有使用fun2
。它認爲它應該由單獨的函數執行。
如果我理解正確的解決方案2,我不應該在這裏使用參數化的測試,但只需在一種測試方法中生成一些重複的檢查。這是正確的方法? –
我假設你想通過移動常見代碼到另一個地方(這使得它們更復雜的恕我直言)在測試之間刪除重複(有趣的方法)。你的@Parameters是好的(你想在少數數據集上運行你的測試用例),但它可以做一點simmpler(看PS編輯) –