将一组参数注入@Parameterized测试类的最简单方法是什么?
用例:
我有一个看起来像这样的常规课程
@RunWith(Parameterized.class)
class Tests {
public void testOne() { }
public void testTwo() { }
@Parameters
public static Collection<Object[]> generateData() { }
}
可以像这样调用标准JUnit运行器: org.junit.runner.JUnitCore.runClasses(TestClass1.class,...);
但是,没有办法指定/覆盖参数。
如何注入自己的参数?
答案 0 :(得分:0)
junit不是为使用您的参数运行其他人的junit类而设计的。所以如果可能的话,重构你测试类以使它们支持你想要的行为。如果你不能重构那么你所能做的就是使用一些解决方法。例如:
答案 1 :(得分:-1)
我会使用generateData()
方法生成所有五百个元素。另外,我会添加一个用getParameters()
注释的方法@Parameters
。它可以调用generateData()
来获取完整集合,然后加载日志文件(如果存在)并将集合减少到失败的测试参数。如果没有日志文件,它将返回整个集合。您可能需要显式命名参数才能识别它们,因为不能保证JUnit以相同的顺序重新运行测试/测试参数(参见Changing names of parameterized tests)。
@RunWith(Parameterized.class)
public class Tests {
@Parameters
public static Collection<Object[]> getParameters() {
List<Object[]> parameters = generateData();
return filterParameters(parameters);
}
private static Collection<Object[]> filterParameters(Collection<Object[]> params) {
// load a file to exclude successful tests
// ...
}
private static Collection<Object[]> generateData() {
return new ArrayList<Object[]>();
}
}
另一种方法可能是在Scanner
方法中使用System.in
和@Parameters
,以便您可以从控制台中选择带有用户输入的参数。但是,如果要在持续集成中使用它们,则需要确保在没有用户交互的情况下仍可以运行测试。