我最近开始使用
Android Studio和gradle进行Android开发,并且发现它比eclipse / ant或maven更好.但是我最近开始尝试使用我的应用程序实现某种单元和/或集成测试.我能够使用谷歌最近发布的Espresso框架进行基本测试.我有一些测试,但我需要模拟和注入模拟的对象版本.我过去用过匕首换另一个项目,所以我把匕首放进了我的项目.但是现在我的测试因为以下错误而无法运行:
gradle connectedCheck
…
4.1.2 Failed: Instrumentation run Failed due to ‘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' }
但这给了我一个关于静态初始化的错误.这似乎是由espresso框架中关于匕首的一些静态初始化代码引起的.因此,在向instrumentTestCompile添加dagger依赖项之后,我得到了上面提到的IllegalAccessError.
任何人都有运气,包括你的项目中的匕首和做咖啡测试?
解决方法
花了很长时间,但我终于开始工作了.我必须做以下事情:
>像这样声明我的依赖:
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-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' }
>从here复制hamcrest罐子
>从这样的jar中删除许可证文件(否则你会收到有关重复的LICENSE.txt文件的错误)
zip -d hamcrest-core-1.1.jar LICENSE.txt zip -d hamcrest-library-1.1.jar LICENSE.txt
>运行gradle connectedCheck
有几点需要注意: – Hamcrest 1.3对我不起作用,得到一个关于匹配器丢失的错误 – 疯狂有多少箍我必须跳过才能到达这里. – 祝你好运与android studio一起玩得好.