我正在努力让Robolectric测试并在我们当前的项目中工作,而且没有太多运气。我的偏好是让它们在Android Studio 1.1.0+中运行。这是我的项目结构:
这是我的测试:
import android.widget.Button;
import com.mycompany.android.app.R;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
import static org.junit.Assert.assertNotNull;
@Config(manifest = "AndroidManifest.xml")
@RunWith(RobolectricTestRunner.class)
public class SplashActivityTest {
private SplashActivity splashActivity;
@Before
public void setup() {
splashActivity = Robolectric.buildActivity(SplashActivity.class).create().start().resume().get();
}
@Test
public void shouldNotBeNull() {
Button signUpButton = (Button) splashActivity.findViewById(R.id.sign_up_button);
assertNotNull(signUpButton);
Button loginButton = (Button) splashActivity.findViewById(R.id.login_button);
assertNotNull(loginButton);
}
}
无论我做什么尝试通过更改清单的路径来让框架找到测试,它都找不到它 - 我得到WARNING: No manifest file found at ./AndroidManifest.xml.Falling back to the Android OS resources only.
消息或API Level XX is not supported - Sorry!
消息。最后,我认为这是我在测试运行时遇到以下错误的原因:
android.content.res.Resources$NotFoundException: unknown resource 2130903074
我确实打开了实验选项,配置了正确的Gradle插件(单元测试工作正常),但我不确定我缺少什么才能让仪器测试运行起来并运行
应用级构建文件:
apply plugin: 'org.robolectric'
testCompile 'junit:junit:4.12'
testCompile 'org.mockito:mockito-core:1.9.5'
testCompile 'org.robolectric:robolectric:2.4'
testCompile 'org.hamcrest:hamcrest-core:1.1'
testCompile 'org.hamcrest:hamcrest-library:1.1'
testCompile 'org.hamcrest:hamcrest-integration:1.1'
顶级构建文件:
dependencies {
classpath 'com.android.tools.build:gradle:1.1.0'
classpath 'org.robolectric:robolectric-gradle-plugin:1.0.0'
}
答案 0 :(得分:10)
我写了一步一步指导如何使用android studio 1.1.0启用robolectric http://nenick-android.blogspot.de/2015/02/android-studio-110-beta-4-and.html我想你会找到你的问题的答案。例如https://github.com/nenick/AndroidStudioAndRobolectric
答案 1 :(得分:2)
在您的情况下,下一次更改可能有所帮助:
@Config(manifest = "src/main/AndroidManifest.xml", emulateSdk = 18, reportSdk = 18)
但也请阅读@nenick指南
答案 2 :(得分:2)
经过几天的努力,我最终找出了问题的根本原因:
WARNING: No manifest file found at ./AndroidManifest.xml.Falling back to the Android OS resources only. messages, or API Level XX is not supported - Sorry!
我在stackOverFlow上找到的很多答案告诉我将Manifest文件的路径添加到 @Config ,如下所示:
@Config(manifest = "src/main/AndroidManifest.xml")
它确实适用于我的一个项目,但是当我打开一个新项目并设置测试环境时,会弹出相同的错误消息。
这背后的原因将是项目的不同工作目录。您应首先找到您的工作目录,然后在@Config(maniest =“...”)中指定相对路径。
我在哪里可以找到Android Studio中的工作目录?
Run -> Edit Configurations -> Junit -> Your Test
-> Configuration Tab -> **Working directory:**
以我的工作目录为例,我的工作目录是
"/Users/Bible/AndroidstudioProjects/MVP"
所以我的AndroidManifest.xml的路径应该是
@Config(manifest = "app/src/main/AndroidManifest.xml")
你走了!希望这个答案可以让你的生活更轻松。
答案 3 :(得分:2)
我遇到了同样的错误。我们使用几种口味和类型 因此,有一些步骤可以使其发挥作用:
1)Android studio测试运行配置
您还必须在Windows中将工作目录设置为$ MODULE_DIR $。 robolectric.org/getting-started/应该这样说。
2)单元测试应该注释如下:
@RunWith(RobolectricTestRunner.class)
@Config(constants = BuildConfig.class, sdk = 21, manifest = "src/main/AndroidManifest.xml", packageName = "com.example.yourproject")
public class SomeFragmentTest {
这里我们有清单文件和packageName的简单链接
答案 4 :(得分:0)
我刚刚改为:
@RunWith(RobolectricTestRunner.class)
它有效。所有其他配置内容似乎都是不必要的。
答案 5 :(得分:0)
如果您使用的是最新的Android Studio(1.2.x),那么更好的方法是使用RobolectricGradleTestRunner.class 它专为不同的口味和测试口味而设计。您也无需指定源清单。它将根据您正在运行的构建风格来获取清单。当您拥有不同的构建环境(登台,生产)并且希望在特定环境中运行测试用例时,这非常有用