Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Studio 2.3更新导致机器人分子单元测试失败_Android_Unit Testing_Android Studio_Robolectric - Fatal编程技术网

Android Studio 2.3更新导致机器人分子单元测试失败

Android Studio 2.3更新导致机器人分子单元测试失败,android,unit-testing,android-studio,robolectric,Android,Unit Testing,Android Studio,Robolectric,我的所有单元测试都开始抛出此错误: No such manifest file: build\intermediates\bundles\debug\AndroidManifest.xml java.lang.NullPointerException at org.robolectric.shadows.ShadowAssetManager.getAndResolve(ShadowAssetManager.java:375) at org.robolectric.shadows

我的所有单元测试都开始抛出此错误:

No such manifest file: build\intermediates\bundles\debug\AndroidManifest.xml

java.lang.NullPointerException
    at org.robolectric.shadows.ShadowAssetManager.getAndResolve(ShadowAssetManager.java:375)
    at org.robolectric.shadows.ShadowAssetManager.getResourceValue(ShadowAssetManager.java:117)
    at android.content.res.AssetManager.getResourceValue(AssetManager.java)
    at android.content.res.Resources.getValue(Resources.java:1347)
    at android.support.v7.widget.AppCompatDrawableManager.loadDrawableFromDelegates(AppCompatDrawableManager.java:332)
    at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:197)
    at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:190)
    at android.support.v7.widget.AppCompatDrawableManager.checkVectorDrawableSetup(AppCompatDrawableManager.java:711)
    at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:195)
    at android.support.v7.widget.TintTypedArray.getDrawableIfKnown(TintTypedArray.java:81)
    at android.support.v7.app.AppCompatDelegateImplBase.__constructor__(AppCompatDelegateImplBase.java:131)
    at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java)
    at android.support.v7.app.AppCompatDelegateImplV9.<init>(AppCompatDelegateImplV9.java)
    at android.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.java)
    at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java)
    at android.support.v7.app.AppCompatDelegateImplV23.<init>(AppCompatDelegateImplV23.java)
    at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:203)
    at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:185)
    at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:519)
    at android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.java:71)
    at android.app.Activity.performCreate(Activity.java:6237)
    at org.robolectric.util.ReflectionHelpers.callInstanceMethod(ReflectionHelpers.java:195)
    at org.robolectric.util.ActivityController$1.run(ActivityController.java:126)
    at org.robolectric.shadows.ShadowLooper.runPaused(ShadowLooper.java:340)
    at org.robolectric.shadows.CoreShadowsAdapter$2.runPaused(CoreShadowsAdapter.java:40)
    at org.robolectric.util.ActivityController.create(ActivityController.java:123)
    at org.robolectric.util.ActivityController.create(ActivityController.java:133)
    at com.si.play.adapter.RosterAdapter2Test.setUp(RosterAdapter2Test.java:43)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
    at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:250)
    at org.robolectric.RobolectricTestRunner.runChild(RobolectricTestRunner.java:176)
    at org.robolectric.RobolectricTestRunner.runChild(RobolectricTestRunner.java:49)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:142)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:117)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:262)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:84)
没有这样的清单文件:build\intermediates\bundles\debug\AndroidManifest.xml
java.lang.NullPointerException
位于org.roblectric.shadows.ShadowAssetManager.getAndResolve(ShadowAssetManager.java:375)
位于org.roblectric.shadows.ShadowAssetManager.getResourceValue(ShadowAssetManager.java:117)
位于android.content.res.AssetManager.getResourceValue(AssetManager.java)
位于android.content.res.Resources.getValue(Resources.java:1347)
在android.support.v7.widget.AppCompatidDrawableManager.loadDrawableFromDelegates(AppCompatidDrawableManager.java:332)上
位于android.support.v7.widget.AppCompatidDrawableManager.getDrawable(AppCompatidDrawableManager.java:197)
位于android.support.v7.widget.AppCompatidDrawableManager.getDrawable(AppCompatidDrawableManager.java:190)
在android.support.v7.widget.AppCompatidDrawableManager.checkVectorDrawableSetup(AppCompatidDrawableManager.java:711)中
位于android.support.v7.widget.AppCompatidDrawableManager.getDrawable(AppCompatidDrawableManager.java:195)
位于android.support.v7.widget.TintTypedArray.getDrawableIfKnown(TintTypedArray.java:81)
位于android.support.v7.app.AppCompateDelegateImplbase.\uuuu构造函数\uuuuuu(AppCompateDelegateImplbase.java:131)
位于android.support.v7.app.AppCompateDelegateImplbase.(appCompateDelegateImplbase.java)
在android.support.v7.app.AppCompateDelegateImplV9.(appCompateDelegateImplV9.java)
位于android.support.v7.app.AppCompateDelegateImplv11.(appCompateDelegateImplv11.java)
在android.support.v7.app.AppCompateDelegateImplv14.(appCompateDelegateImplv14.java)
在android.support.v7.app.AppCompateDelegateImplv23.(appCompateDelegateImplv23.java)
在android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:203)中
在android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:185)上
位于android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:519)
位于android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.java:71)
位于android.app.Activity.performCreate(Activity.java:6237)
位于org.roblectric.util.ReflectionHelpers.callInstanceMethod(ReflectionHelpers.java:195)
位于org.roblectric.util.ActivityController$1.run(ActivityController.java:126)
位于org.roblectric.shadows.ShadowLooper.runPaused(ShadowLooper.java:340)
位于org.roblectric.shadows.CoreShadowsAdapter$2.runPaused(CoreShadowsAdapter.java:40)
位于org.roblectric.util.ActivityController.create(ActivityController.java:123)
位于org.roblectric.util.ActivityController.create(ActivityController.java:133)
位于com.si.play.adapter.RosterAdapter2Test.setUp(RosterAdapter2Test.java:43)
位于org.junit.runners.model.FrameworkMethod$1.runReflectVeCall(FrameworkMethod.java:50)
位于org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
位于org.junit.runners.model.FrameworkMethod.invokeeexplosive(FrameworkMethod.java:47)
位于org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
位于org.roblectric.roblectrictTestRunner$2.evaluate(roblectrictTestRunner.java:250)
位于org.roblectric.roblectrictTestRunner.runChild(roblectrictTestRunner.java:176)
位于org.roblectric.roblectrictTestRunner.runChild(roblectrictTestRunner.java:49)
位于org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
位于org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
位于org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
访问org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
位于org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
位于org.roblectric.roblectrictTestRunner$1.evaluate(roblectrictTestRunner.java:142)
位于org.junit.runners.ParentRunner.run(ParentRunner.java:363)
位于org.junit.runner.JUnitCore.run(JUnitCore.java:137)
位于com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:117)
位于com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42)
位于com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:262)
位于com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:84)

效果很好。我唯一改变的是,我将Android Studio更新为2.3,将gradle插件更新为2.3。到目前为止,我通过在每个测试的运行配置路径中手动写入
$MODULE\u DIR$
来修复它。但真的很烦人,每次都写下来。有人经历过类似的情况吗?

默认设置它,这样您创建的每个新测试配置都将继承它:

运行>编辑配置…>默认值>Android JUnit


在工作目录中输入:
$MODULE\u DIR$

Android studio正在查看应用程序文件夹以从AS 2.3版本运行测试。如果自定义Roboelectric Runner扩展了RoboelectricTestRunner,则可以覆盖其中的工作目录,而不是每次从编辑配置中设置工作目录

这是我的密码

`公共类CustomRobolectricRunner扩展了RobolectricTestRunner{

// Build output location for Android Studio 2.2 and older
private static final String BUILD_OUTPUT = "build/intermediates";

// Build output location for Android Studio 2.3 and newer
private static final String BUILD_OUTPUT_APP_LEVEL = "app/build/intermediates";

public CustomRobolectricRunner(Class<?> testClass) throws InitializationError {
    super(testClass);
}

@Override
protected AndroidManifest getAppManifest(Config config) {
    FileFsFile res = FileFsFile.from(BUILD_OUTPUT, "/res/merged", BuildConfig.FLAVOR, BuildConfig.BUILD_TYPE);
    FileFsFile assets = FileFsFile.from(BUILD_OUTPUT, "assets", BuildConfig.FLAVOR, BuildConfig.BUILD_TYPE);
    FileFsFile manifest = FileFsFile.from(BUILD_OUTPUT, "manifests", "full", BuildConfig.FLAVOR, BuildConfig.BUILD_TYPE, "AndroidManifest.xml");

    // If above files does not exist in the specified paths, look them at the app folder level. This is needed
    // as Android studio 2.3 changed the working directory.
    if (!manifest.exists()) {
        manifest = FileFsFile.from(BUILD_OUTPUT_APP_LEVEL, "manifests", "full", BuildConfig.FLAVOR, BuildConfig.BUILD_TYPE, "AndroidManifest.xml");
    }

    if (!res.exists()) {
        res = FileFsFile.from(BUILD_OUTPUT_APP_LEVEL, "/res/merged", BuildConfig.FLAVOR, BuildConfig.BUILD_TYPE);
    }

    if (!assets.exists()) {
        assets = FileFsFile.from(BUILD_OUTPUT_APP_LEVEL, "assets", BuildConfig.FLAVOR, BuildConfig.BUILD_TYPE);
    }

    AndroidManifest androidManifest = new AndroidManifest(manifest, res, assets) {
        @Override
        public Class getRClass() {
            return R.class;
        }

        public int getTargetSdkVersion() {
            /**
             * Lollipop is currently the highest version supported in 3.0.
             */
            return Build.VERSION_CODES.LOLLIPOP;
        }
    };

    return androidManifest;
}`
//为Android Studio 2.2及更早版本生成输出位置
私有静态最终字符串BUILD\u OUTPUT=“BUILD/intermediates”;
//为Android Studio 2.3及更新版本构建输出位置
私有静态最终字符串BUILD\u OUTPUT\u APP\u LEVEL=“APP/BUILD/intermediates”;
公共CustomRobolectricRunner(类testClass)引发初始化错误{
超级(测试类);
}
@凌驾
受保护的AndroidManifest getAppManifest(配置){
FileFsFile res=FileFsFile.from(BUILD\u输出,“/res/merged”,BuildConfig.FLAVOR,BuildConfig.BUILD\u类型);
FileFsFile assets=FileFsFile.from(BUILD\u输出,“资产”,BuildConfig.FLAVOR,BuildConfig.BUILD\u类型);
FileFsFile manifest=FileFsFile.from(BUILD\u输出,“清单”,“完整”,BuildConfig.FLAVOR,BuildConfig.BUILD\u类型,