我有一个 TestCase 类,其中有 5 个测试方法。我可以直接执行这个类,然后所有的测试方法都会被执行。这很好。
假设如果我想执行一些测试方法(但不是全部),并且这些方法将根据运行时的某些条件来决定,解决方案是什么..?
更清楚地说,
我有一个测试用例类“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 类。但我不确定如何准确使用它。 任何人都可以帮助解决这个问题吗...?
提前致谢, 苏尼尔
最佳答案
您可以使用自定义 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");
}
}
关于java - 运行时的 JUnit 测试方法选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16707680/