我有一个TestCase类,有5种测试方法。我可以直接执行这个类,然后执行所有的测试方法。这很好。
假设我想执行一些测试方法(但不是全部)并且这些方法将在运行时根据某些条件决定,那么解决方案是什么??
更清楚,
我有一个TestCase类“MyTestCase”
public class MyTestCase extends TestCase
{
@Test
public void test1()
{
....
}
@Test
public void test2()
{
....
}
@Test
public void test3()
{
....
}
@Test
public void test4()
{
....
}
@Test
public void test5()
{
....
}
}
如果我运行此类,将执行所有测试。
但我的要求是:我不希望所有方法始终执行。有时2种方法或3种方法或4种方法等....
我有一个XML文件,它决定了必须执行哪些测试方法。 无论XML文件中有什么,只应执行那些测试方法。 (我有一个类,它读取XML文件以获取测试方法名称。)
有没有办法控制在运行时没有在TestCase类中执行的测试方法....?
我想我必须使用TestSuite类。但我不确定如何正确使用它。 任何人都可以帮助解决这个问题......?
提前致谢, 苏尼
答案 0 :(得分:0)
您可以使用自定义TestRunner来执行此操作。
public class SelectiveJunitRunner extends BlockJUnit4ClassRunner {
public SelectiveJunitRunner(Class<?> klass) throws InitializationError {
super(klass);
}
@Override
protected List<FrameworkMethod> computeTestMethods() {
//Inject ignore List
List<String> ignoreList = Arrays.asList("test2","test4");
List<FrameworkMethod> computeTestMethods = super.computeTestMethods();
List<FrameworkMethod> filteredList = new ArrayList<>();
for (FrameworkMethod frameworkMethod : computeTestMethods) {
if (!ignoreList.contains(frameworkMethod.getName()))
filteredList.add(frameworkMethod);
}
return filteredList;
}
}
Junit测试用例
@RunWith(SelectiveJunitRunner.class)
public class SelectiveTest {
@Test
public void test1() {
System.out.println("1");
}
@Test
public void test2() {
System.out.println("2");
}
@Test
public void test3() {
System.out.println("3");
}
@Test
public void test4() {
System.out.println("4");
}
}