7

如何在 Android 上使用 JMock?我有几个帖子说这是不可能的,但肯定有一些方法可以做到吗?

问题似乎是让 Android 甚至可以识别 JMock jar 文件。那么也许有一个解决方案,将 jar 放入资产并制作自定义类加载器?这看起来很麻烦,但听起来它会起作用吗?

4

2 回答 2

8

我让 JMock 在 Android 开源测试项目中工作。

是的:JMock 代码在您手中的设备上执行;-)

我用过:

  • jmock-2.5.1.jar
  • 重新打包的hamcrest -all-1.1.jar(我会解释)
  • jmock-junit3-2.5.1.jar

请参阅以下 Android JMock 测试用例http://github.com/olibye/ToneDial/blob/master/ToneDialTest/src/net/xpdeveloper/dialer/test/TestDialServiceTest.java

以下是我必须克服的三个问题:


Hamcrest 包装

Hamcrest 的多重打包未能通过 Android 包验证。

您在 Android ADK 中遇到的错误是:- 生成最终存档时出错:重复条目:LICENSE.txt

解决方案

解压hamcrest-core-1.1.jar 在同一目录中解压hamcrest-library-1.1.jar。

这第二次解压缩会覆盖 MANIFEST.MF 和 LICENCE.TXT。

zip ../hamcrest-all-1.1.jar

最初,我为 JMock 向 Steve 和 Nat 提出了这个问题

然而,这确实是乔在 Hamcrest 的包装问题(所以我只是把它贴在那里 ;-)


JUnit 包装

eclipse 中的 JUnit 插件包含 Hamcrest 的一个子集。

解决方案 您需要在 Eclipse 项目属性中的 JMock 之后将 JUnit 库移到类路径中。


安卓包装

JUnit v3 是 android.jar 的一部分,因此您不能使用 JUnit 4 风格的 JMock 测试。我们还没有注释;-)

于 2010-10-12T15:53:59.440 回答
1

时代变了,@byeo 的答案比必要的复杂,因为事情正在修复和改进。

使用 Android Studio 3.1.4,我能够让 JMock 和 Hamcrest 轻松工作,至少在单元测试中是这样。我在 build.gradle 文件中添加了以下依赖项:

dependencies{
    ....
    testImplementation files('../../../../lib/jmock-2.8.3/jmock-2.8.3.jar')
    testImplementation files('../../../../lib/jmock-2.8.3/jmock-junit4-2.8.3.jar')
    testImplementation files('../../../../lib/jmock-2.8.3/jmock-legacy-2.8.3.jar')
    testImplementation files('../../../../lib/jmock-2.8.3/objenesis-2.1.jar')
    testImplementation files('../../../../lib/jmock-2.8.3/hamcrest-core-1.3.jar')
    testImplementation files('../../../../lib/jmock-2.8.3/hamcrest-library-1.3.jar')
    testImplementation files('../../../../lib/cglib-nodep-3.2.5.jar')
    ....
}

但是,由于这个问题,我不确定 JMock 是否会在使用模拟器或真实硬件的测试中正常工作:

JMock jars 在 Android 测试项目中不起作用(项目不构建)

于 2018-10-23T16:13:46.697 回答