有人可以在测试套件中组织测试,在
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; } }