为什么不能将 AndroidJUnit4和 ActivityTestRule 导入到单元测试类中?

我在导入一些 Android UI 测试框架类时遇到了麻烦——我就是不知道哪里出了问题!

这是我的课:

@RunWith(AndroidJUnit4.class)
@LargeTest
public class ExampleUnitTest {


@Rule
public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule(MainActivity.class);


@Test
public void listGoesOverTheFold() {
onView(withText("Hello world!")).check(matches(isDisplayed()));
}
}

但是由于某种原因,我得到了“无法找到符号 ActivityTestRule”和“无法找到符号 AndroidJUnit4”的错误。我试过进口,但找不到。

Gradle 中的依赖项设置为:

compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.4.0'
androidTestCompile 'com.android.support:support-annotations:23.4.0'


androidTestCompile 'com.android.support.test:runner:0.4'
androidTestCompile 'com.android.support.test:rules:0.4'
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'
androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2'

所以我想我已经设置了所有的依赖项-我已经尝试了很多东西,但是没有运气。

有人知道吗?

52302 次浏览

There are two different types of tests you can set up in Android

Unit Tests

  • These run directly on the JVM and do not have access to the Android framework classes.
  • They are kept in the test/java package
  • Dependencies need to added in the build.gradle file with the command testCompile
  • You generally use Mockito, Robolectric & JUnit for these tests

Instrumentation Tests

  • These run on an Android emulator and have full access to all the Android classes
  • They are kept in the androidTest/java package
  • Dependencies need to be added to build.gradle with androidTestCompile
  • You generally use Espresso and JUnit for these tests

From what I can tell you are trying to write instrumentation tests with Espresso but have your test in the test/java package which is for unit tests. In that case you need to move your test class to the androidTest/java package.

need this add dependencies

 testCompile 'com.android.support.test:rules:0.5'
testCompile 'com.android.support.test:runner:0.5'

Add dependency.

androidTestCompile 'com.android.support.test:rules:0.5'
androidTestCompile 'com.android.support.test:runner:0.5'

Add these in the newer version:

androidTestImplementation 'com.android.support.test:rules:1.0.2'
androidTestImplementation 'com.android.support.test:runner:1.0.2'

Adding:

androidTestImplementation 'com.android.support.test:rules:1.0.2'

solves problem, but don't forget to sync the project with gradle files. Only then the changes will take effect.

If you migrated to AndroidX, use this:

androidTestImplementation 'androidx.test:rules:1.4.0'
androidTestImplementation 'androidx.test:runner:1.4.0'

For writing UI tests((tests that run on Android Device/Emulator)) in Android, make sure that

  1. The Test classes are in androidTest package rather that test package.

  2. Make sure you make the following dependencies in build.gradle

androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test:rules:1.2.0'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
testImplementation 'junit:junit:4.13'

For Unit Testing(tests that run on JVM) make sure

1.Test classes are in test package

2.Make sure you make the following dependencies in build.gradle

testImplementation 'junit:junit:4.13'
testImplementation 'org.mockito:mockito-core:2.23.0'

From androidX use

androidTestImplementation 'androidx.test:rules:1.1.1'


androidTestImplementation 'androidx.test:runner:1.1.1'

In your dependencies section in your app level build.gradle file

for eg :

 dependencies {


androidTestImplementation 'androidx.test:rules:1.1.1'
androidTestImplementation 'androidx.test:runner:1.1.1'
}

Then import

import androidx.test.rule.ActivityTestRule;

Using ActivityScenarioRule worked for me.

    @Rule
public ActivityScenarioRule<MainActivity> mActivityRule = new ActivityScenarioRule(MainActivity.class);

you need to add these dependencies

    androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'