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


73

我在导入某些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”。我尝试导入它们,但找不到它们。

build.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'

所以我想我已经完成了所有依赖项设置-我已经尝试了很多事情,但是没有运气。

谁有想法?


什么目录是您的测试类-test/javaandroidTest/java
Jahnold '16

1
正在接受测试/ java
Hallupa

4
如果我的测试在中androidTest/java,怎么办?
alayor '18

Answers:


63

您可以在Android中设置两种不同类型的测试

单元测试

  • 它们直接在JVM上运行,无法访问Android框架类。
  • 它们保存在test/java包装中
  • 需要使用以下命令在build.gradle文件中添加依赖项 testCompile
  • 您通常使用Mockito,Robolectric和JUnit进行这些测试

仪器测试

  • 它们在Android模拟器上运行,并且可以完全访问所有Android类
  • 它们保存在androidTest/java包装中
  • 需要将依赖项添加到build.gradle中 androidTestCompile
  • 通常,您使用Espresso和JUnit进行这些测试

据我所知,您正在尝试使用Espresso编写仪器测试,但是将您的测试放在test/java用于单元测试的软件包中。在这种情况下,您需要将测试类移至androidTest/java包中。


3
谢谢,解决了!我没意识到test / java和androidTest / java之间有区别
Hallupa

确保您也TestImplement'com.android.support.test:rules:1.0.2'
GeekWithGlasses

129

将它们添加到较新的版本中:

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

60

如果您迁移到AndroidX,请使用以下命令:

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

37

新增:

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

解决了问题,但不要忘记将项目与gradle文件同步。只有这样,更改才会生效。


22

需要这个添加依赖

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

'com.android.support.test:rules:0.5'和'com.android.support.test:runner:0.5'适用于androidTest,而非测试。所以应该是androidTestCompile'c​​om.android.support.test:rules:0.5'androidTestCompile'c​​om.android.support.test:runner:
0.5'– thuongle

androidTestImplementation形式从Android Studio 3.x开始
Ewoks

11

添加依赖项。

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

6

从androidX使用

androidTestImplementation 'androidx.test:rules:1.1.1'

androidTestImplementation 'androidx.test:runner:1.1.1'

在应用程序级别build.gradle文件的“依赖项”部分中

例如:

 dependencies {

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

然后导入

导入androidx.test.rule.ActivityTestRule;


3

要在Android中编写UI测试((在Android Device / Emulator上运行的测试)),请确保

  1. Test类在androidTest包中,而不是在测试包中。

  2. 确保在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'

对于单元测试(在JVM上运行的测试),请确保

1.测试类在测试包中

2.确保在build.gradle中创建以下依赖项

testImplementation 'junit:junit:4.13'
testImplementation 'org.mockito:mockito-core:2.23.0'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.