2016-06-09 3 views
1

Как я могу динамически создать фильтр категории и вызвать ядро ​​JUnit для запуска моих тестов? Я пытаюсь создать простой класс с основным методом, который можно вызвать для запуска моих тестов, но я уверен, что это чистый способ.Как передать CategoryFilter в JUnitcore?

Идея заключалась в том, чтобы разрешить включение и исключение в качестве параметров командной строки и использовать их для построения CategoryFilter. Я потратил немало времени на это и еще не понял, как передать фильтр JunitCore.

public class SingleJUnitTestRunner { 

    public static void main(String... args) throws ClassNotFoundException { 
     System.out.println("Running tests"); 
     System.out.println(Arrays.asList(args)); 

     synchronized (Play.class) { 
      if (!Play.started) { 
       Play.init(new File("."), "test"); 
       Play.start(); 
      } 
     } 

     CategoryFilter catfil = Categories.CategoryFilter.include(Play.classloader.loadClass("testutils.SlowTests")); 
     List<Filter> filters = new ArrayList<Filter>(); 
     filters.add(catfil); 

     TestSuite suite = new TestSuite(); 

     for (Class tests : Play.classloader.getAnnotatedClasses(Category.class)) { 
      if (catfil.shouldRun(Description.createSuiteDescription(tests))) { 
       suite.addTest(new JUnit4TestAdapter(tests)); 
       System.out.println("With " + tests.getName()); 
      } 
     } 

     Result result = new JUnitCore().run(suite); 
     System.out.println(result.getRunCount()); 
     System.exit(result.wasSuccessful() ? 0 : 1); 
    } 
} 

ответ

2

По JUnit 4.12 вы можете сделать это:

java org.junit.runner.JUnitCore \ 
    --filter=org.junit.experimental.categories.IncludeCategories=testutils.SlowTests \ 
    com.example.ExampleTestSuite 

Смотрите release notes для деталей.

Если вы хотите сделать это программно, использовать Request.filterWith():

Request request = ... 
Categories.CategoryFilter filter = 
    Categories.CategoryFilter.include(
     testutils.SlowTests.class); 
request = request.filterWith(filter); 
Result result = JUnitCore.run(request); 

 Смежные вопросы

  • Нет связанных вопросов^_^