代码:
public class Testprogdi extends ActivityInstrumentationTestCase2 {
public Testprogdi(String pkg, Class activityClass) {
super(pkg, activityClass);
// TODO Auto-generated constructor stub
}
Context mContext;
Registration reg = new Registration();
public void setUp(){
try {
super.setUp();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mContext = this.getInstrumentation().getContext();
}
public void test(){
Assert.assertNotNull(reg.pass_url());}
public void test1(){
Assert.assertTrue(reg.pass_url().startsWith("www"));}
public void test2(){
Assert.assertTrue(reg.pass_url().startsWith("http"));
}
}
例外:
junit.framework.AssertionFailedError: Class com.android.deviceintelligence.test.Testprogdi has no public constructor TestCase(String name) or TestCase()
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:529)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1448)`
我的所有测试类都出现了相同的错误。
TestCase应该有一个无arg的公共构造函数或一个带有单个String参数的构造函数。
您应该删除您的公共Testprogdi(String-pkg,Class-activityClass)构造函数,并在setUp()方法中进行任何类型的初始化或添加
public Testprogdi() {}
或
public Testprogdi(String name) {
// initialization
}
顺便说一句,如果你做一些其他的改变(与第一个问题无关),你的测试会更容易维护:
为测试方法提供更有意义的名称。
不需要在setUp()中捕获(异常e)。
我不知道test1()和test2()是如何通过的。
Eclipse为您提供了构造函数模板,如:
public Testprogdi(String pkg, Class<progdi> activityClass) {
super(pkg, activityClass);
// TODO Auto-generated constructor stub
}
或:
public Testprogdi(Class<progdi> activityClass) {
super(activityClass);
// TODO Auto-generated constructor stub
}
progdi是活动类的名称。但正如教程中所说,contsructor应该是这样的:
public Testprogdi() {
super("com.progdi", progdi.class);
// TODO Auto-generated constructor stub
}
你忘了这里的参数:
public class Testprogdi extends ActivityInstrumentationTestCase2<progdi> {}