Android测试套件:包括除明确定义的所有测试用例

时间:2011-05-18 07:18:54

标签: java android junit

问题:我需要调整Android Developer TestSuite example中的代码,以便它运行包中的所有TestCase,除了一些明确定义的TestCase。目前它只运行它们:

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

看看Docs for TestSuiteBuilder,也许我可以通过添加对TestSuiteBuilder的addRequirements()方法的调用来调整上面的代码,但是如果这样做,或者应该使用它,我无法做出正面或反面去做吧。

如果addRequirements将用于排除AndroidTestCases,我该怎么称呼它?我不明白我会通过什么论点,文档说:

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

但我找不到关于类Predicate的存在或者应该如何填充以实现我的目标的任何内容。

由于

3 个答案:

答案 0 :(得分:2)

我希望在开发期间运行单元测试时排除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;
    }   
}

答案 1 :(得分:1)

我决定只是明确地包括我想要的所有内容。

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

TestSuite似乎没有removeTestSuite方法或类似方法,因此我不能取消包含TestSuiteBuilder将为其构建的测试添加的任何测试。如果有人能解释如何使用addRequirements(...)方法排除/包含测试,我将不胜感激。

答案 2 :(得分:0)