Android和JUnit:如何将单个测试添加到测试套件中?

时间:2013-01-14 11:34:05

标签: android junit

我一直在苦苦挣扎。在JUnit / Android中创建测试套件时,我可以进行以下操作:

  • 添加与套件
  • 相同的包中存在的所有测试(在所有类中)
  • 添加一个特定的类contatining testMethods

但是,我完全无法执行以下操作:

  • 将特定类的特定testMethod添加到测试套件中。

现在,我知道这应该是可能的,因为有无数的例子表明了这一点。

这就是它应该如何运作:

包含测试方法的测试类:

import com.frank.android.lookup.SomeClass;
import android.test.AndroidTestCase;

public class ArithmeticsTests extends AndroidTestCase {
    SomeClass sctest;

    protected void setUp () throws Exception {
        sctest = new SomeClass();
        super.setUp();
    }

    public void testAddNumbers () {
        assertEquals(9, sctest.addNumbers(3, 6));
    }

    public void testSubtractNumbers () {
        assertEquals(2, sctest.subtractNumbers(6, 4));
    }

    protected void tearDown () throws Exception {
        super.tearDown();
    }
}

这是测试套件类:

import junit.framework.TestSuite;

public class ProjectTestSuite_SomeTests extends TestSuite {

    public static Test suite () {
        TestSuite suite = new TestSuite("ArithmeticsTests");
        suite.addTest(new ArithmeticsTests("testAddNumbers"));
        suite.addTest(new ArithmeticsTests2("testSubtractNumbers"));

        return suite;
    }
}

现在,我尝试添加各个测试方法的两行导致此错误:

The constructor ArithmeticsTests(String) is undefined

现在,我已经闲逛了很长时间,我找不到任何解释。似乎缺少某些东西,因为它不理解我正在尝试做什么。它抱怨的“字符串”实际上是方法的名称 - 我不是试图将字符串传递给类的构造函数 - 我正在尝试将类的方法添加到测试套件中。

我在这里使用Android SDK附带的JUnit版本,但我没有安装与此相关的任何其他内容。有什么遗失的吗? (显然有点什么?)

编辑:

我在ArithmeticsTests课程中添加了一个建设者:

public ArithmeticsTests (String s) {}

现在上述错误消失了。

但是,当我运行测试套件时,我收到此错误:

testSuiteCreationFailed
....
Caused by: java.lang.NullPointerException: Method name must not be null.

2 个答案:

答案 0 :(得分:2)

我提出了同样的问题并发现虽然AndroidTestCase没有构造函数采用String参数,但它确实有setName(String name)方法。通过调用setName方法,您可以将单个方法添加到测试用例中。 使用示例中的代码,您的测试套件可能如下所示:

import junit.framework.TestSuite;

public class ProjectTestSuite_SomeTests extends TestSuite {

    public static Test suite () {
        TestSuite suite = new TestSuite("ArithmeticsTests");
        ArithmeticsTests arithmeticsTests = new ArithmeticsTests();
        arithmeticsTests.setName("testAddNumbers");
        suite.addTest(arithmeticsTests);
        ArithmeticsTests2 arithmeticsTest2 = new ArithmeticsTests2();
        arithmeticsTest2.setName("testSubtractNumbers");
        suite.addTest(arithmeticsTest2);

        return suite;
    }
}

答案 1 :(得分:1)

这对我有用。

public static TestSuite suite() {
    final TestSuite t = new TestSuite();
    t.addTest(TestSuite.createTest(TestExampleClass1.class, "test1"));
    t.addTest(TestSuite.createTest(TestExampleClass2.class, "test2"));
    t.addTest(TestSuite.createTest(TestExampleClass3.class, "test2"));

    return t;
}