AssertionFailedError:<class>没有公共构造函数

dus*_*cik 25 java android unit-testing android-studio


我正在使用Android Studio,我需要为我的项目添加单元测试.
我阅读了各种教程,但没有什么能让我理解.
我的问题是:
TestXMLParser.java:

public class TestXMLParser extends ActivityInstrumentationTestCase2<HomePageActivity> {

public TestXMLParser(Class<HomePageActivity> activityClass) {
    super(activityClass);
}

@Override
public void setUp() throws Exception {
    super.setUp();

    //Controller.init((Activity)getContext());
}

@Override
public void tearDown() throws Exception {
    super.tearDown();
}

public void testTrue() throws Exception {
    assertTrue(true);
}
...
}
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我看到这个消息:

junit.framework.AssertionFailedError: Class cz.cvut.kosapp.jUnitTests.TestXMLParser has no public constructor TestCase(String name) or TestCase()
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:190)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:175)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1661)
Run Code Online (Sandbox Code Playgroud)

我真的不知道为什么.其他jUnit测试运行良好,例如我使用时:

public class TestXMLParser extends AndroidTestCase { ...
Run Code Online (Sandbox Code Playgroud)

在标题中,这工作和测试正确运行.
我需要使用Context(作为Activity)来运行其他代码(在Controller类中).

你知道如何解决这个问题吗?
谢谢您的意见.

p e*_*e p 45

您需要添加默认构造函数或构造函数,该构造函数将a String作为参数.通过调用基类构造函数添加以下默认构造函数应该有效:

public TestXMLParser() {
    super(HomePageActivity.class);
}
Run Code Online (Sandbox Code Playgroud)

  • 你是对的 - ActivityInstrumentationTestCase2不公开默认构造函数.相反,您为类创建一个默认构造函数,然后使用ActivityInstrumentationTestCase2构造函数(其中一个接受类)的有效参数调用super,并传入测试中的类.我在这里也找到了类似的东西:http://stackoverflow.com/questions/2346734/trying-to-run-android-junit-tests-in-eclipse-fails (9认同)
  • Android Studio的移动速度非常快,以至于您花费了一半的已发布图书以及许多互联网示例都无法正常工作. (2认同)