gpt4 book ai didi

java - JUnitParams - 在测试之前执行单独的方法

转载 作者:行者123 更新时间:2023-12-01 10:19:32 28 4
gpt4 key购买 nike

@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));
}

}

我正在尝试找出进行此测试的正确方法。我想使用参数化测试,因为它真的很方便。

正如您所看到的,在每个测试函数中我都会调用一些函数(fun1fun2)。但我只需要在每次测试时调用它一次(例如,在每次参数化测试执行之前)。

有什么方法可以告诉 JUnitParams 在执行所有参数化测试之前应该执行其他函数吗?

我无法使用@Before注释,因为正如您在test1中看到的那样,我没有使用fun2。它认为它应该由单独的函数执行。

最佳答案

解决方案 1:

由于 fun[1|2] 不依赖于内部测试状态,因此尝试将它们的调用相应地放在 data 和 data2 方法中。

public static Iterable<Object[]> data() {
rec.fun1(matrix);
return Arrays.asList(
new Object[]{"expectedvalue1", "input1"},
new Object[]{"expectedvalue2", "input2"}
);
}

public static Iterable<Object[]> data2() {
rec.fun1(matrix);
rec.fun2(matrix);
return Arrays.asList(
new Object[]{"expectedvalue1", "input1"},
new Object[]{"expectedvalue2", "input2"}
);
}

解决方案 2:

拆分测试用例不是最佳实践。您的测试更难维护。流程要复杂得多。您的测试启动还存在相互依赖的风险。有时重复测试会更好。

PS:如果您使用字符串作为测试方法参数,最好按照此文件第 25 行中的方式传递它们: https://github.com/Pragmatists/JUnitParams/blob/master/src/test/java/junitparams/usage/SamplesOfUsageTest.java而不是特殊的方法。

@Test
@Parameters({"AAA,1", "BBB,2"})
public void paramsInAnnotation(String p1, Integer p2) { }

关于java - JUnitParams - 在测试之前执行单独的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35697293/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com