如何在Android上使用JMock?我有几个帖子说它不可能,但肯定有一些的方法吗?
问题似乎是让Android甚至识别JMock jar文件。那么也许有一个解决方案,将jar放入资产并制作自定义类加载器?这看起来很麻烦,但听起来有点像吗?
答案 0 :(得分:8)
我让JMock在Android开源测试项目中工作。
是:JMock代码在您手中的设备上执行; - )
我用过:
有关Android JMock测试用例http://github.com/olibye/ToneDial/blob/master/ToneDialTest/src/net/xpdeveloper/dialer/test/TestDialServiceTest.java
的信息,请参阅以下内容以下是我必须克服的三个问题:
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的包装问题(所以我只是在那里发布; - )
eclipse中的JUnit插件包含Hamcrest的一个子集。
<强>解决方案强> 在eclipse项目属性中,您需要在JMock之后将JUnit库向下移动到类路径中。
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 )