1

我正在尝试添加Espresso来测试我们的应用程序。

当我没有inhamcrest-1.1.jarbuild.gradle,我收到以下错误:

com.espresso.PracticeTest > testClickOnActionBar[Nexus 10 - 4.3] FAILED 
java.lang.NoClassDefFoundError: org.hamcrest.Matchers
at com.google.android.apps.common.testing.ui.espresso.matcher.ViewMatchers.withId(ViewMatchers.java:274)
:Example:connectedInstrumentTest FAILED

当我确实hamcrest-1.1.jarin 时build.gradle,我收到以下错误:

 UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dx.cf.iface.ParseException: class name (org/hamcrest/beans/HasProperty) does not match path (hamcrest-library-1.1/org/hamcrest/beans/HasProperty.class)
at com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:520)
at com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406)
at com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388)
at com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251)
at com.android.dx.command.dexer.Main.processClass(Main.java:665)
at com.android.dx.command.dexer.Main.processFileBytes(Main.java:634)
at com.android.dx.command.dexer.Main.access$600(Main.java:78)
at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:572)
at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
at com.android.dx.command.dexer.Main.processOne(Main.java:596)
at com.android.dx.command.dexer.Main.processAllFiles(Main.java:498)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:264)
at com.android.dx.command.dexer.Main.run(Main.java:230)
at com.android.dx.command.dexer.Main.main(Main.java:199)
at com.android.dx.command.Main.main(Main.java:103)
...while parsing hamcrest-library-1.1/org/hamcrest/beans/HasProperty.class

这是build.gradle

dependencies {
instrumentTestCompile files('libs/dagger-1.1.0.jar', 'libs/dagger-compiler-1.1.0.jar',
        'libs/hamcrest-library-1.1.jar',
        'libs/espresso-1.0-SNAPSHOT.jar', 'libs/guava-14.0.1.jar', 'libs/javawriter-2.1.1.jar',
        'libs/javax.annotation-api-1.2.jar','libs/javax.inject-1.jar',
        'libs/jsr305-1.3.9.jar', 'libs/testrunner-1.0-SNAPSHOT.jar',
        'libs/testrunner-runtime-1.0-SNAPSHOT.jar')
 }

我做了一个./gradlew clean build然后./gradlew example:connectedCheck运行。

有没有人可以解决这个问题?

4

2 回答 2

4

这里的答案可能比我原来的答案更好地为您服务

花了很长时间,但我终于让它工作了。我必须执行以下操作:

  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'
    }
    
  2. 从这里复制 hamcrest jar

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

    zip -d hamcrest-core-1.1.jar LICENSE.txt
    zip -d hamcrest-library-1.1.jar LICENSE.txt
    
  4. 运行 gradle connectedCheck

需要注意的几件事:
- Hamcrest 1.3 对我不起作用,出现有关缺少匹配器的错误 - 疯狂我必须跳过多少圈才能到达这里。
- 祝你好运,让它与 android studio 一起玩得很好。

于 2013-11-11T15:52:22.947 回答
0

我还没有使用过 gradle,但是当我将所有 hamcrest jar 添加到我的类路径时,我遇到了类似的问题。

添加 hamcrest-all.jar 仅对个人(lib、核心和集成)不起作用。

也就是说,它确实抱怨罐子里的 license.txt。

这不是问题,我不得不花时间弄清楚“正确”修复是什么,但从 jar 中删除许可证文件,这一切都开始工作了。

于 2013-11-11T15:46:24.417 回答