java - 扩展 Junit ParentRunner 类以过滤测试方法

标签 java junit junit4

我需要读取一个文本文件,其中包含所有测试方法列表的是/否值,并仅为测试用例类选择"is"标记的测试方法,并在 Junit 中执行。

所以我编写了一个脚本来读取文件并将其分组到 ma​​p< TestCaseName,ArrayList_ofEnabledTestMethods > 中。要运行它,我发现一个选项是使用 Assume.assumeTrue()

但我想尝试一些其他方式...而不是在每个测试方法之前编写额外的行,所以我尝试编写一个自定义运行程序(ABCSuite 扩展 ParentRunner ) 并计划在我的 TestSuite 文件中使用它,如下所示:

import org.junit.runner.RunWith;
import org.junit.runners.Suite;

@RunWith(ABCSuite.class)
@Suite.SuiteClasses({TestCalc.class})
public class BatTest{

}

此处 TestCalc.class 包含所有测试方法,其中一些在前面提到的文本文件中标记为"is"。

请告诉我如何使用扩展 ParentRunner 类/Junit 库 来实现这一点。如果有任何好的教程或之前解决此问题的任何链接,请..分享

最佳答案

您可以通过扩展 BlockJUnit4ClassRunner 来做到这一点:

public class FilterRunner extends BlockJUnit4ClassRunner {
  private List<String> testsToRun = Arrays.asList(new String[] { "test1" });

  public FilterRunner(Class<?> klass) throws InitializationError {
    super(klass);
  }

  @Override
  protected void runChild(final FrameworkMethod method, RunNotifier notifier) {
    Description description= describeChild(method);
    if (method.getAnnotation(Ignore.class) != null || !testsToRun.contains(method.getName())) {
      notifier.fireTestIgnored(description);
    } else {
      runLeaf(methodBlock(method), description, notifier);
    }
  }
}

你可以随意填写testsToRun。以上将把其他测试标记为已忽略。你这样使用:

@RunWith(Suite.class)
@SuiteClasses({Class1Test.class})
public class TestSuite {
}

@RunWith(FilterRunner.class)
public class Class1Test {
  @Test
  public void test1() {
    System.out.println("test1");
  }

  @Test
  public void test2() {
    System.out.println("test2");
  }
}

这会产生以下输出:

test1

如果您不想将@FilterRunner 添加到每个测试类,请查看我对如何定义 JUnit method rule in a suite? 的回答.

关于java - 扩展 Junit ParentRunner 类以过滤测试方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11885862/

相关文章:

java - jUnit 和 DateFormat(EclEmma 代码覆盖率)

mocking - 模拟静态函数调用时出错

java - 如何从android studio创建测试类和文件夹?

Java:构建 Point2D.Double 数组

java - 在 Android 应用程序中将 Jersey 用于 restful api 时出现此错误 :

java - Spring REST,用户资源和密码

java - Realm.copyFromRealm 导致从不正确的线程访问 Realm。是否可以?

android - 单元测试不适用于 Android Studio 北极狐

junit - 无法调用 "reactor.core.publisher.Mono.thenReturn(Object)",因为返回值为空

java - IntelliJ - 测试配置。如何为每个人配置一次运行?