4

我已经为此苦苦挣扎了一段时间。在 JUnit/Android 中创建测试套件时,我可以执行以下操作:

  • 添加与套件存在于同一包中的所有测试(在所有类中)
  • 添加包含 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.
4

2 回答 2

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;
    }
}
于 2013-07-08T08:12:35.210 回答
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;
}
于 2014-03-31T10:09:49.920 回答