10 eclipse junit android test-suite testcase
有人可以在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();
}
}
Run Code Online (Sandbox Code Playgroud)
测试套件类包括包中的所有测试:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
如上所述,这是有效的.但是,如果我有很多测试用例,两个类都有多个测试,其他类有其他测试(组织不同类型的测试,imo是有意义的),那么我想创建包含特定测试的测试套件类等,所以它们可以独占运行.
我已经看过这方面的例子,但我没有让任何人去工作.有没有人有一个很好的例子?也就是说,新的测试套件包括来自一个或多个测试用例类的特定测试用例.
更新:
以下两个示例有效:
运行包中的所有测试:
public static Test suite () {
return new TestSuiteBuilder(ProjectTestSuite_AllTests.class)
.includeAllPackagesUnderHere()
.build();
}
Run Code Online (Sandbox Code Playgroud)
在特定的测试类中运行所有测试(AndroidTestCase类):
public static Test suite () {
Class testClass = ArithmeticsTests.class;
TestSuite suite = new TestSuite(testClass);
return suite;
}
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用:
public static Test suite () {
TestSuite suite= new TestSuite();
suite.addTest(new ArithmeticsTest("testAddNumbers"));
suite.addTest(new ArithmeticsTest("testSubtractNumbers"));
return suite;
}
Run Code Online (Sandbox Code Playgroud)
最后一个(非工作)示例来自developer.android.com.我尝试这个时得到的错误是:
构造函数ArithmeticsTests(String)未定义
这很奇怪,因为我没有尝试访问构造函数,而是在测试用例类(testAddNumbers)中命名一个特定的测试方法.
这是包含几个测试的测试用例类:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
这是测试套件类,我尝试在其中包含(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;
}
}
Run Code Online (Sandbox Code Playgroud)
上面的addTest行导致此错误:
构造函数ArithmeticsTests(String)未定义
这是我在这个例子中尝试测试的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;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是 AndroidTestCase 类只有一个构造函数 - AndroidTestCase()
仅 JUnit 的 TestCase 类支持使用字符串指定测试用例,但 AndroidTestCase() 不支持。这就是您面临这个问题的原因。
| 归档时间: |
|
| 查看次数: |
7276 次 |
| 最近记录: |