有人可以在测试套件中组织测试,在
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,6));
}
public void testSubtractNumbers () {
assertEquals(2,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;
}
}
解决方法
AFAIK的问题是AndroidTestCase类只有一个构造函数 – AndroidTestCase()
使用字符串指定测试用例仅由JUnit的TestCase类支持,但不支持AndroidTestCase().这就是为什么你正在面对这个问题.