API JUnit 4 Get Handle для метода @Test

Используя API JUnit 4, есть ли способ получить дескриптор метода в тестовом классе, который аннотирован @Test?

Вот что я сейчас делаю:

JUnitCore core = new JUnitCore();
Request request = Request.aClass(MyTest.class);
Result result = core.run(request);
if(result.wasSuccessful())
    System.out.println("SUCCESS"); // or do something else

Этот код будет запускать все тесты в MyTest, Однако я хочу просто указать имя тестового класса в начале (MyTest.class) и выполните следующее в цикле:

  • Получить следующий @Test аннотированный тест в классе.
  • Распечатать детали
  • Запустите тест (возможно, используя Request.method(MyTest.class, "myTestMethod")

Возможно, я могу использовать рефлексию, чтобы получить имена методов и проверить, снабжены ли они аннотацией Test, но я хотел посмотреть, предоставляет ли API-интерфейс JUnit эту функциональность.

1 ответ

Решение

Ты можешь использовать TestClass:

public void runTests(Class<?> clazz) {
  TestClass testClass = new TestClass(MyTest.class);
  List<FrameworkMethod> tests = testClass.getAnnotatedMethods(
      Test.class);
  for (FrameworkMethod m : tests) {
    String methodName = m.getName();
    Request request = Request.method(clazz, methodName);
    JUnitCore core = new JUnitCore();
    Result result = core.run(request);
    if (result.wasSuccessful())
      System.out.println(m + ": SUCCESS");
    }
  }
}

Обратите внимание, что это неэффективный способ запуска тестов, особенно если у вас есть правила класса или вы используете @BeforeClass или же @AfterClass

Другие вопросы по тегам