有人可以阐明如何在 Android 中使用 JUnit 组织测试套件中的测试吗?我发现几乎所有示例都不起作用,我想知道我没有得到什么。
我做了一个小例子,其中包含一个包含几个测试的 AndroidTestCase 类,以及一个包含包中所有测试的测试套件。这有效(显然):
包含测试的测试用例类:
public class ArithmeticsTest extends AndroidTestCase {
SomeClass sctest;
protected void setUp () throws Exception {
sctest = new SomeClass();
super.setUp();
}
/* Test the SomeClass.addNumbers (int, int) method: */
public void testAddNumbers () {
assertEquals(9, sctest.addNumbers(3, 6));
}
/* Test the SomeClass.addNumbers (int, int) method: */
public void testSubtractNumbers () {
assertEquals(2, sctest.subtractNumbers(6, 4));
}
protected void tearDown () throws Exception {
super.tearDown();
}
}
包含包中所有测试的测试套件类:
import junit.framework.Test;
import android.test.suitebuilder.TestSuiteBuilder;
public class ProjectTestSuite_AllTests {
public static Test suite () {
return new TestSuiteBuilder(ProjectTestSuite_AllTests.class)
.includeAllPackagesUnderHere()
.build();
}
}
如前所述,这行得通。但是,如果我有很多测试用例,两个类都有几个测试,其他类有其他测试(组织不同类型的测试很有意义,imo),那么我想创建包含特定测试的测试套件类等,因此它们可以独占运行。
我见过这方面的例子,但我没有让任何人工作。有没有人有一个很好的例子?也就是说,一个新的测试套件包括来自一个或多个测试用例类的特定测试用例。
更新:
下面两个例子有效:
运行包中的所有测试:
public static Test suite () {
return new TestSuiteBuilder(ProjectTestSuite_AllTests.class)
.includeAllPackagesUnderHere()
.build();
}
运行特定测试类(AndroidTestCase 类)中的所有测试:
public static Test suite () {
Class testClass = ArithmeticsTests.class;
TestSuite suite = new TestSuite(testClass);
return suite;
}
但是,这不起作用:
public static Test suite () {
TestSuite suite= new TestSuite();
suite.addTest(new ArithmeticsTest("testAddNumbers"));
suite.addTest(new ArithmeticsTest("testSubtractNumbers"));
return suite;
}
最后一个(非工作)示例来自 developer.android.com。尝试此操作时出现的错误是:
The constructor ArithmeticsTests(String) is undefined
这很奇怪,因为我没有尝试访问构造函数,而是在测试用例类 (testAddNumbers) 中命名了一个特定的测试方法。
1 月 11 日更新:
这是包含几个测试的测试用例类:
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();
}
}
这是我尝试在其中包含(f.ex.)上述类中的一个测试的测试套件类:
public class ProjectTestSuite_SomeTests {
public static Test suite () {
// This does not work:
TestSuite suite= new TestSuite();
suite.addTest(new ArithmeticsTests("testAddNumbers"));
return suite;
}
}
上面的 addTest 行导致此错误:
The constructor ArithmeticsTests(String) is undefined
这是我尝试在此示例中测试的 SomeClass 文件:
public class SomeClass {
int classInt;
String classString;
Item item;
public SomeClass () {}
public SomeClass (int ci, String cs) {
this.classInt = ci;
this.classString = cs;
}
public int addNumbers (int num1, int num2) {
return num1+num2;
}
public int subtractNumbers (int num1, int num2) {
return num1-num2;
}
}
最佳答案
要仅运行测试函数的一个子集,请使您的套件 方法如下所示:
public static Test suite () {
final TestSuite suite = new TestSuite();
suite.addTest(TestSuite.createTest(ArithmeticsTests.class, "testAddNumbers"));
suite.addTest(TestSuite.createTest(ArithmeticsTests.class, "testSubtractNumbers"));
// add some more tests here or comment out one of the lines above
// if you want to skip a particular test
return suite;
}
createTest 方法似乎没有很好的文档记录,但它对我有用: http://developer.android.com/reference/junit/framework/TestSuite.html#createTest(java.lang.Class, java.lang.String)
关于android - 如何创建仅在一个或多个类中运行指定测试的 Android 测试套件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14234131/