Android Studio-Robolectric:Android.content.res.Resources$NotFoundException:没有这样的标签com.my.app:string/app\u name
这个问题我似乎无法摆脱,我可能已经阅读了3或4打文章和线程试图解决它。我在下面概述了一切 基本上,问题是,我在机器人方面有缺陷吗?或者是我遗漏了一些小步骤,或者我有一个奇怪的插件组合。对此,如有任何指导,将不胜感激 视窗7 版本:Android Studio-Robolectric:Android.content.res.Resources$NotFoundException:没有这样的标签com.my.app:string/app\u name,android,android-studio,robolectric,Android,Android Studio,Robolectric,这个问题我似乎无法摆脱,我可能已经阅读了3或4打文章和线程试图解决它。我在下面概述了一切 基本上,问题是,我在机器人方面有缺陷吗?或者是我遗漏了一些小步骤,或者我有一个奇怪的插件组合。对此,如有任何指导,将不胜感激 视窗7 版本: 格拉德尔2.7 Android Studio 1.3.2 机器人分子3.0 机器人向导3+ 项目依赖关系: dependencies { classpath 'com.android.tools.build:gradle:1.3.0' classp
- 格拉德尔2.7
- Android Studio 1.3.2
- 机器人分子3.0
- 机器人向导3+
dependencies {
classpath 'com.android.tools.build:gradle:1.3.0'
classpath "com.newrelic.agent.android:agent-gradle-plugin:4.244.0"
classpath 'com.github.triplet.gradle:play-publisher:1.1.2'
classpath 'org.moallemi.gradle.advanced-build-version:gradle-plugin:1.5.0'
}
应用程序依赖项
import org.moallemi.gradle.internal.VersionCodeType
apply plugin: 'com.android.application'
apply plugin: 'newrelic'
apply plugin: 'com.github.triplet.play'
apply plugin: 'org.moallemi.advanced-build-version'
android {
def SERVICE_ACCOUNT = “account”;
def P12_KEY = file('mykey.p12')
signingConfigs {
releaseConfig {
…
}
}
compileSdkVersion 22
buildToolsVersion '22.0.1'
advancedVersioning {
nameOptions {
versionMajor 6
versionMinor advancedVersioning.versionCode
}
codeOptions {
versionCodeType VersionCodeType.AUTO_INCREMENT_ONE_STEP
}
}
defaultConfig {
applicationId "com.my.app ="
minSdkVersion 15
targetSdkVersion 22
versionCode = advancedVersioning.versionCode
versionName = advancedVersioning.versionName
}
buildTypes {
def STRING = "String"
def URL = "URL"
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.releaseConfig
}
staging {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
development {
minifyEnabled false
}
debug {
minifyEnabled false
}
}
testOptions {
unitTests.returnDefaultValues = true
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:22.2.0'
compile 'com.google.android.gms:play-services:4.2.+'
compile(name: 'library-release', ext: 'aar')
compile 'com.squareup.okhttp:okhttp:2.4.0'
compile 'com.google.code.gson:gson:2.3.1'
compile 'org.roboguice:roboguice:3.+'
provided 'org.roboguice:roboblender:3.+'
testCompile 'junit:junit:4.12'
testCompile 'org.mockito:mockito-core:1.10.19'
testCompile "org.robolectric:robolectric:3.0"
}
repositories {
flatDir {
dirs 'libs'
}
}
定制渐变流道
public class M1stRoboelectricGradleTestRunner extends RobolectricTestRunner {
public M1stRoboelectricGradleTestRunner(Class<?> testClass) throws InitializationError {
super(testClass);
String buildVariant = (BuildConfig.FLAVOR.isEmpty()
? "" : BuildConfig.FLAVOR+ "/") + BuildConfig.BUILD_TYPE;
String intermediatesPath = BuildConfig.class.getResource("")
.toString().replace("file:", "");
intermediatesPath = intermediatesPath
.substring(0, intermediatesPath.indexOf("/classes"));
System.setProperty("android.package",
BuildConfig.APPLICATION_ID);
System.setProperty("android.manifest",
intermediatesPath + "/manifests/full/"
+ buildVariant + "/AndroidManifest.xml");
System.setProperty("android.resources",
intermediatesPath + "/res/merged/" + buildVariant);
System.setProperty("android.assets",
intermediatesPath + "/assets/" + buildVariant);
}
@Override protected AndroidManifest getAppManifest(Config config) {
String manifestProperty = System.getProperty("android.manifest");
String resProperty = System.getProperty("android.resources");
String assetsProperty = System.getProperty("android.assets");
AndroidManifest manifest = new AndroidManifest(Fs.fileFromPath(manifestProperty), Fs.fileFromPath(resProperty),
Fs.fileFromPath(assetsProperty)){
};
manifest.setPackageName("com.my.app");
return manifest;
}
}
问题:
以下代码行是引发错误的代码:
mActivity = Robolectric.buildActivity(
MainActivity.class).create().get();
最初,我尝试使用默认的robolectricGradleTestRunner,但一直收到ResourceNotFound com.my.app::string/app\u名称not found。在阅读了大量荒谬的文章和博客之后,我偶然发现,通过实现一个定制的runner,我能够克服它。这在某种程度上解决了应用程序名称问题
mActivity = Robolectric.buildActivity(
MainActivity.class).create().get();
八,。常规单元测试在运行时可以正常工作。您尝试过吗
@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk=21, packageName="com.my.app")
public class MainActivityTest
所以这个决定对我来说是一个掌心,但希望能帮助其他人 packageName与applicationId不同。在大多数例子中,它们都是相同的,所以我没有意识到它们的不同,直到我决定让我们试试看 在上面,包名实际上是org.my.app,但我的applicationId是com.my.app
一旦它被切换,一切都运转得很好。这是个新手犯的错误 提示:尝试正确格式化您的问题,并将实际问题移至顶部。绝妙提示-有什么建议可以更好地表达它吗?是编辑错误还是您的
构建。gradle
真的有applicationId“com.my.app=“
”?这只是个错误,抱歉。我必须清理文件。是的,我试过了,结果我犯了一个简单愚蠢的错误。packageName不是applicationId,尽管在我看到的所有示例中,它们都是相同的,所以我对它一点也不在意——作为最后努力的一部分进行了更改,结果成功了。我犯了一个超级愚蠢的错误。sdk=21的目的是什么?告诉Robolectric对Android sdk 21运行测试,否则它将使用gradle文件中定义的targetSdkVersion。Robolectric 3.0不支持sdk 22。packageName与build.gradle中的applicationId相同
@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk=21, packageName="com.my.app")
public class MainActivityTest