[英]Error "has no public TestCase(String name) or TestCase() in Junit test
我是junit測試android的初學者。 我正在關注本教程,但收到此錯誤
junit.framework.AssertionFailedError: Class com.example.projectfortest.test.MainActivityTest has no public constructor TestCase(String name) or TestCase()
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1701)
這是我的代碼:
public class MainActivityTest extends
ActivityInstrumentationTestCase2<MainActivity> {
private MainActivity mMainActivity;
private TextView mFirstTestText;
private String expected, actual;
public MainActivityTest(Class<MainActivity> activityClass) {
super(activityClass);
}
@Override
protected void setUp() throws Exception {
super.setUp();
mMainActivity = getActivity();
mFirstTestText = (TextView) mMainActivity.findViewById(R.id.txt1);
expected = mMainActivity.getString(R.string.txt1_test);
actual = mFirstTestText.getText().toString();
}
public void testPreconditions() {
assertNotNull("mMainActivity is null", mMainActivity);
assertNotNull("mFirstTestText is null", mFirstTestText);
}
public void testMyFirstTestTextView_labelText() {
assertEquals(expected, actual);
}
}
我的代碼中沒有發現任何錯誤。 請幫忙
正如異常所說,將默認構造函數添加到您的類。 這是測試框架初始化所必需的。 替換您的構造函數:
public MainActivityTest(Class<MainActivity> activityClass) {
super(activityClass);
}
通過以下方式:
public MainActivityTest() {
super(MainActivity.class);
}
此構造函數沒有框架所需的參數,並顯示在教程的代碼列表中:
如果您的問題仍未解決:您可以通過添加來嘗試此注釋
@RunWith (JUnit4.class)
對我來說,它是 build.gradle 中的錯誤結構。
這是一個很好的實現(build.gradle.kts):
defaultConfig {
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
dependencies {
androidTestImplementation("junit:junit:4.13.1")
androidTestImplementation("androidx.test:runner:1.2.0")
androidTestImplementation("androidx.test:rules:1.2.0")
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.