草庐IT

android - Robolectric With Gradle : .\res\values 不是目录

coder 2023-12-23 原文

我正致力于使用 gradle 实现运行 robolectric 测试。

我目前正在执行所有测试,但是每当我尝试使用 Robolectric.buildActivity(ClassName.class).create().get();

实例化 Activity 时

编辑:使用 HelloWorld activity = new HelloWorld(); 生成相同的错误

我会得到以下错误:

 java.lang.RuntimeException: java.lang.RuntimeException: .\res\values is not a directory
        at org.robolectric.res.PackageResourceLoader.doInitialize(PackageResourceLoader.java:23)
        at org.robolectric.res.XResourceLoader.initialize(XResourceLoader.java:29)
        at org.robolectric.res.OverlayResourceLoader.doInitialize(OverlayResourceLoader.java:24)
        at org.robolectric.res.XResourceLoader.initialize(XResourceLoader.java:29)
        at org.robolectric.res.XResourceLoader.getValue(XResourceLoader.java:53)
        at org.robolectric.res.OverlayResourceLoader.getValue(OverlayResourceLoader.java:58)
        at org.robolectric.res.RoutingResourceLoader.getValue(RoutingResourceLoader.java:31)
        at org.robolectric.shadows.ShadowAssetManager.getAndResolve(ShadowAssetManager.java:263)
        at org.robolectric.shadows.ShadowAssetManager.getAndResolve(ShadowAssetManager.java:259)
        at org.robolectric.shadows.ShadowAssetManager.getResourceValue(ShadowAssetManager.java:85)
        at android.content.res.AssetManager.getResourceValue(AssetManager.java)
        at android.content.res.Resources.getValue(Resources.java:1009)
        at android.content.res.Resources.loadXmlResourceParser(Resources.java:2098)
        at android.content.res.Resources.getLayout(Resources.java:852)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:394)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
        at org.robolectric.tester.android.view.RoboWindow.setContentView(RoboWindow.java:82)
        at org.robolectric.shadows.ShadowActivity.setContentView(ShadowActivity.java:272)
        at android.app.Activity.setContentView(Activity.java)
        at at.inaut.hw.HelloWorldActivity.onCreate(HelloWorldActivity.java:13)
        at android.app.Activity.performCreate(Activity.java:5008)
        at org.fest.reflect.method.Invoker.invoke(Invoker.java:112)
        at org.robolectric.util.ActivityController$1.run(ActivityController.java:119)
        at org.robolectric.shadows.ShadowLooper.runPaused(ShadowLooper.java:256)
        at org.robolectric.util.ActivityController.create(ActivityController.java:114)
        at org.robolectric.util.ActivityController.create(ActivityController.java:126)
        at at.inaut.hw.HelloWorldTest.testInstantiation(HelloWorldTest.java:23)

我的 Gradle 构建

import java.util.regex.Pattern

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}

apply plugin: 'android'

android {
       compileSdkVersion 17
       buildToolsVersion "17.0"

    sourceSets {

       main{
           manifest.srcFile 'AndroidManifest.xml'

       }
    }
}

sourceSets {
    unitTest {
        java.srcDir file('src/test/java')
        resources.srcDir file('src/test/resources')
    }
}

configurations {
    unitTestCompile.extendsFrom runtime
    unitTestRuntime.extendsFrom unitTestCompile
}


repositories {
    mavenCentral()
}

dependencies {
    compile project(':libs:actionbarsherlock')
}
sourceSets {
    unitTest {
        java.srcDir file('test')
        resources.srcDir file('test/resources')
    }
}

dependencies {
    unitTestCompile files("$project.buildDir/classes/debug")
    unitTestCompile 'junit:junit:4.11'
    unitTestCompile 'org.robolectric:robolectric:2.1.1'
    unitTestCompile 'com.google.android:android:4.1.1.4'
    unitTestCompile files("${project(':libs:actionbarsherlock').buildDir}/classes/debug")
}

configurations {
    unitTestCompile.extendsFrom runtime
    unitTestRuntime.extendsFrom unitTestCompile
    }

    task unitTest(type:Test, dependsOn: assemble) {
    description = "run unit tests"
    testClassesDir = project.sourceSets.unitTest.output.classesDir
    classpath = project.sourceSets.unitTest.runtimeClasspath
    }

check.dependsOn unitTest

这是测试抛出错误的代码

导致错误的测试

activity =   Robolectric.buildActivity(HelloWorldActivity.class).create().get();
    testBtn = (Button)activity.findViewById(R.id.btnTest);
    assertNotNull(testBtn);
    assertThat(testBtn.getText().toString(), equalTo("testme"));
    assertNotNull(activity);

会不会跟我的项目结构有关?还是 robolectric 加载资源的方式?

最佳答案

我能够通过将我的项目结构更改为类似来解决 ./res/value 问题

.Project Root
├── build.gradle
├── settings.gradle

├── build
└── src
  └── main
  |__res

└── test
    └── src
          └── java

关于android - Robolectric With Gradle : .\res\values 不是目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17986159/

有关android - Robolectric With Gradle : .\res\values 不是目录的更多相关文章

  1. ruby-on-rails - active_admin 目录中的常量警告重新声明 - 2

    我正在使用active_admin,我在Rails3应用程序的应用程序中有一个目录管理,其中包含模型和页面的声明。时不时地我也有一个类,当那个类有一个常量时,就像这样:classFooBAR="bar"end然后,我在每个必须在我的Rails应用程序中重新加载一些代码的请求中收到此警告:/Users/pupeno/helloworld/app/admin/billing.rb:12:warning:alreadyinitializedconstantBAR知道发生了什么以及如何避免这些警告吗? 最佳答案 在纯Ruby中:classA

  2. ruby-on-rails - 如何在 Gem 中获取 Rails 应用程序的根目录 - 2

    是否可以在应用程序中包含的gem代码中知道应用程序的Rails文件系统根目录?这是gem来源的示例:moduleMyGemdefself.included(base)putsRails.root#returnnilendendActionController::Base.send:include,MyGem谢谢,抱歉我的英语不好 最佳答案 我发现解决类似问题的解决方案是使用railtie初始化程序包含我的模块。所以,在你的/lib/mygem/railtie.rbmoduleMyGemclassRailtie使用此代码,您的模块将在

  3. 【Java 面试合集】HashMap中为什么引入红黑树,而不是AVL树呢 - 2

    HashMap中为什么引入红黑树,而不是AVL树呢1.概述开始学习这个知识点之前我们需要知道,在JDK1.8以及之前,针对HashMap有什么不同。JDK1.7的时候,HashMap的底层实现是数组+链表JDK1.8的时候,HashMap的底层实现是数组+链表+红黑树我们要思考一个问题,为什么要从链表转为红黑树呢。首先先让我们了解下链表有什么不好???2.链表上述的截图其实就是链表的结构,我们来看下链表的增删改查的时间复杂度增:因为链表不是线性结构,所以每次添加的时候,只需要移动一个节点,所以可以理解为复杂度是N(1)删:算法时间复杂度跟增保持一致查:既然是非线性结构,所以查询某一个节点的时候

  4. ruby-on-rails - Rails 单表继承 : How to override the value written to the type field - 2

    在我的系统中,我已经定义了STI。Dog继承自Animal,在animals表中有一个type列,其值为"Dog"。现在我想让SpecialDog继承自dog,只是为了在某些特殊情况下稍微修改一下行为。数据还是一样。我需要通过SpecialDog运行的所有查询,以返回数据库中类型为Dog的值。我的问题是因为我有一个type列,rails将WHERE"animals"."type"IN('SpecialDog')附加到我的查询中,所以我不能获取原始的Dog条目。所以我想要的是以某种方式覆盖rails在通过SpecialDog访问数据库时使用的值,使其表现得像Dog。有没有办法覆盖用于类型

  5. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  6. ruby-on-rails - 没有这样的文件或目录 - 用 Mini Magick 识别 - 2

    在我让另一个人重做我的前端UI之前,我的Rails应用程序运行平稳。我已经尝试解决此错误3天了。这是错误:Nosuchfileordirectory-identifyExtractedsource(aroundline#59):575859606162@post=Post.find(params[:id])authorize@postif@post.update_attributes(post_params)flash[:notice]="Postwasupdated."redirect_to[@topic,@post]else{"utf8"=>"✓","_method"=>"patc

  7. ruby - Sinatra 找不到 View 目录 - 2

    我正在尝试以一种更类似于普通RubyGem结构的方式构建我的Sinatra应用程序。我有以下文件树:.├──app.rb├──config.ru├──Gemfile├──Gemfile.lock├──helpers│  ├──dbconfig.rb│  ├──functions.rb│  └──init.rb├──hidden│  └──Rakefile├──lib│  ├──admin.rb│  ├──api.rb│  ├──indexer.rb│  ├──init.rb│  └──magnet.rb├──models│  ├──init.rb│  ├──invite.rb│  ├─

  8. ruby-on-rails - 只有当不是 nil 时才执行映射? - 2

    如果names为nil,则以下中断。我怎样才能让这个map只有在它不是nil时才执行?self.topics=names.split(",").mapdo|n|Topic.where(name:n.strip).first_or_create!end 最佳答案 其他几个选项:选项1(在其上执行map时检查split的结果):names_list=names.try(:split,",")self.topics=names_list.mapdo|n|Topic.where(name:n.strip).first_or_create!e

  9. ruby - 如何在 ruby​​ 中复制目录结构,不包括某些文件扩展名 - 2

    我想编写一个ruby​​脚本来递归复制目录结构,但排除某些文件类型。因此,给定以下目录结构:folder1folder2file1.txtfile2.txtfile3.csfile4.htmlfolder2folder3file4.dll我想复制这个结构,但不包含.txt和.cs文件。因此,生成的目录结构应如下所示:folder1folder2file4.htmlfolder2folder3file4.dll 最佳答案 您可以使用查找模块。这是一个代码片段:require"find"ignored_extensions=[".cs"

  10. ruby-on-rails - self 在 Rails 模型中的值(value)是什么?为什么没有明显的实例方法可用? - 2

    我的rails3.1.6应用程序中有一个自定义访问器方法,它为一个属性分配一个值,即使该值不存在。my_attr属性是一个序列化的哈希,除非为空白,否则应与给定值合并指定了值,在这种情况下,它将当前值设置为空值。(添加了检查以确保值是它们应该的值,但为简洁起见被删除,因为它们不是我的问题的一部分。)我的setter定义为:defmy_attr=(new_val)cur_val=read_attribute(:my_attr)#storecurrentvalue#makesureweareworkingwithahash,andresetvalueifablankvalueisgiven

随机推荐