使用android gradle + dagger运行instrumentTests

Mat*_*lfe 6 android android-testing android-gradle-plugin android-espresso

我最近开始使用Android Studio和gradle进行Android开发,并且发现它比eclipse/ant或maven更好.但是我最近开始尝试使用我的应用程序实现某种单元和/或集成测试.我能够使用谷歌最近发布的Espresso框架进行基本测试.我有一些测试,但我需要模拟和注入模拟的对象版本.我过去用过匕首换另一个项目,所以我把匕首放进了我的项目.但是现在我的测试因为以下错误而无法运行:

gradle connectedCheck
Run Code Online (Sandbox Code Playgroud)

...

4.1.2失败:由于'java.lang.IllegalAccessError'导致检测运行失败:EspressoApp:connectedCheck

我在这里创建了一个简单的演示:https: //github.com/mwolfe38/android-espresso-dagger

只需克隆然后从命令行运行:gradle connectedCheck

在上面我已经尝试了几种不同的依赖方式,最初是这样的:

dependencies {
    compile 'com.android.support:appcompat-v7:+'
    compile 'com.squareup.dagger:dagger-compiler:1.1.0'
    compile 'com.squareup.dagger:dagger:1.1.0'

    instrumentTestCompile files('libs/espresso-1.0-SNAPSHOT.jar',
            'libs/testrunner-1.0-SNAPSHOT.jar',
            'libs/testrunner-runtime-1.0-SNAPSHOT.jar')
    instrumentTestCompile 'org.hamcrest:hamcrest-all:1.3'
    instrumentTestCompile 'com.google.guava:guava:15.0'
}
Run Code Online (Sandbox Code Playgroud)

但这给了我一个关于静态初始化的错误.这似乎是由espresso框架中关于匕首的一些静态初始化代码引起的.因此,在向instrumentTestCompile添加dagger依赖项之后,我得到了上面提到的IllegalAccessError.

任何人都有运气,包括你的项目中的匕首和做咖啡测试?

Mat*_*lfe 11

花了很长时间,但我终于开始工作了.我必须做以下事情:

  1. 像这样声明我的依赖:

    dependencies {
      compile 'com.android.support:appcompat-v7:+'
      compile 'com.squareup.dagger:dagger-compiler:1.1.0'
      compile 'com.squareup.dagger:dagger:1.1.0'
    
      instrumentTestCompile files('libs/espresso-1.0-SNAPSHOT.jar','libs/testrunner-1.0-SNAPSHOT.jar','libs/testrunner-runtime-1.0-SNAPSHOT.jar')
      instrumentTestCompile files('libs/hamcrest-core-1.1.jar', 'libs/hamcrest-library-1.1.jar', 'libs/hamcrest-integration-1.1.jar')
      instrumentTestCompile 'com.google.guava:guava:14.0.1'
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 这里复制hamcrest罐子

  3. 从这样的jar中删除许可证文件(否则你会收到有关重复的LICENSE.txt文件的错误)

    zip -d hamcrest-core-1.1.jar LICENSE.txt
    zip -d hamcrest-library-1.1.jar LICENSE.txt
    
    Run Code Online (Sandbox Code Playgroud)
  4. 运行gradle connectedCheck

有几点需要注意:
- Hamcrest 1.3对我来说不起作用,得到一个关于匹配器丢失的错误 - 疯狂有多少篮球我必须跳过才能到达这里.
- 祝你好运与android studio一起玩得好.