在Android上使用JMock

时间:2010-08-27 01:06:11

标签: android classloader jmock

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

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

2 个答案:

答案 0 :(得分: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 Packaging

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

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

然而,这真的是Joe在Hamcrest的包装问题(所以我只是在那里发布; - )


JUnit Packaging

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

<强>解决方案 在eclipse项目属性中,您需要在JMock之后将JUnit库向下移动到类路径中。


Android Packaging

JUnit v3是android.jar的一部分,因此您无法使用JUnit 4样式的JMock测试。 我们还没有注释; - )

答案 1 :(得分: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 do not work inside Android test project (project doesn't build )