Android TestSuite: включает все TestCases, за исключением некоторых явно определенных

Проблема: мне нужно адаптировать код из примера Android Developer TestSuite, чтобы он запускал все TestCases в пакете, кроме нескольких явно определенных. В настоящее время он просто запускает их все:

public class AllTests extends TestSuite {
    public static Test suite() {
        return new TestSuiteBuilder(AllTests.class)
                .includeAllPackagesUnderHere()
                .build();
    }
}

Глядя на Документы для TestSuiteBuilder, возможно, я мог бы адаптировать приведенный выше код, добавив вызов метода addRequirements() TestSuiteBuilder, но я не могу понять, будет ли это делать, или должен использоваться для этого.

Если addRequirements будет и должен использоваться для исключения AndroidTestCases, как мне это назвать? Я не понимаю, какой аргумент я передам, документация гласит:

addRequirements(Predicate...<TestMethod> predicates)
//Exclude tests that fail to satisfy all of the given predicates. 

Но я не могу найти ничего о существовании класса Predicate или как это надо заселить для достижения моей цели.

Спасибо

3 ответа

Решение

Есть способ отключить / игнорировать тесты.

Смотрите эту ссылку

http://veerasundar.com/blog/2009/07/junit-4-testing-for-exception-execution-time-and-disabling-a-test/

Я хотел исключить InstrumentationTestCases при запуске модульных тестов во время разработки, чтобы можно было быстро запустить набор тестов без функциональных тестов.

Вот как я это сделал:

public class FastTestSuite extends TestSuite {

    public static Test suite() {

        // get the list of all the tests using the default testSuiteBuilder
        TestSuiteBuilder b = new TestSuiteBuilder(FastTestSuite.class);
        b.includePackages("com.your.package.name");
        TestSuite allTest = b.build();


        // select the tests that are NOT subclassing InstrumentationTestCase
        TestSuite selectedTests = new TestSuite();

        for (Test test : Collections.list(allTest.tests())) {

            if (test instanceof TestSuite) {
                TestSuite suite = (TestSuite) test;
                String classname = suite.getName();

                try {
                    Class<?> clazz = Class.forName(classname);
                    if (!InstrumentationTestCase.class.isAssignableFrom(clazz)) {
                        selectedTests.addTest(test);
                    }
                } catch (Exception e) {
                    continue;
                }   
            }   
        }   
        return selectedTests;
    }   
}

Я решил просто включить все, что я хочу явно вместо этого.

http://developer.android.com/reference/junit/framework/TestSuite.html

TestSuite, похоже, не имеет метода removeTestSuite или аналогичного, поэтому я не могу исключить какие-либо тесты, которые TestSuiteBuilder добавит в создаваемый тест. Буду признателен, если кто-нибудь сможет объяснить, как исключить / включить тесты, используя метод addRequirements(...).

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