我正试图在现有的JUnit测试中使用我的第一个PowerMockito[PowerMock+Mockito]mock。
我已经缩小了范围,当我只存在类级注释@PrepareForTest
(以及@RunWith(PowerMockRunner.class)
,但没有任何实际的嘲讽代码)时,我得到java.lang.NoClassDefFoundError: javassist/NotFoundException
:如果我注释掉@PrepareForTest
,以及任何实际的嘲笑代码来消除混淆变量,那么错误就不会发生;如果我只对@PrepareForTest
进行联合注释,那么就会发生错误。所以我认为这将问题缩小到只与尝试使用注释有关。。。
我的构建路径上有这些jar:junit-4.11.jar、junit-addons-1.4.jar、mockito-all-1.9.5.jar、mockito-all-1.9.5-sources.jar、powermock-mockito--1.5.4-full.jar。
powermock-mockito-1.5.4-full.jar是我为试用PowerMockito(来自https://code.google.com/p/powermock/wiki/Downloads?tm=2):它为我提供了在没有Eclipse编译错误的情况下编写新的PowerMockito模拟代码所需的一切额外功能。(我已经有了之前已有的JUnit和Mockito测试中提到的其他AR(单独测试,没有PowerMockito),
我可能做错了什么导致了那个错误
(这对我很有帮助)
非常简单的解决方案(一开始我几乎是对的):我缺少了几个PowerMockito依赖性jar(来自https://code.google.com/p/powermock/wiki/Downloads?tm=2):特别是{cglib-nodep-2.2.2.jar,javssist-3.18.1-GA.jar,objenesis-2.1.jar}。
这是一个简单的解决方案,从一开始就有点愚蠢,因为powerMock-googleCode下载页面上有所有这些:在一开始,当我遇到问题时,我只下载并添加了powerMock-mockto--1.5.4-full.jar;我已经有了JUnit&Mockito是jars,所以我认为这组3让我可以在Eclipse中编写PowerMock代码,而不会出现任何编译错误。谷歌代码下载页面在一个zip中有powermockito jar+dependencies,但也表示powerockito jar也可以单独使用。这种情况让我很难意识到我错过了其他一些,因为从这个角度来看,我似乎已经拥有了我所需要的一切(我认为我已经拥有了现有JUnit和Mockito罐子所需要的依赖关系)。
事实上,有依赖关系的zip有我需要的额外的依赖关系来解决问题。我本应该仔细检查第一次,但没有意识到我做出了相反的糟糕假设。
所以。。。答案是确保获得具有所有依赖项的zip[并将它们全部添加到构建路径中]。最后,我觉得这有点明显和愚蠢,但嘿,很多软件错误和问题最终都是这样的:简单的错误假设或我们没有意识到的被忽视的细节,因此在排除故障时需要一段时间才能意识到。。。
我们的一个ant junit目标使用了PowerMock 1.5.5。在我们的案例中,问题是ant junit任务类路径中存在错误版本的javassist。
根据mvn代表的链接,PowerMock 1.5.5依赖于javassist 3.18.2-GA
一旦我们解决了这个问题。。我们所有的嘲弄开始了!
我最近试图运行Mockito示例,但未能提供所有的Jar文件。
此链接包含必要的二进制文件的链接。
https://github.com/jayway/powermok/wiki/Downloads
使用下面的Mockito和PowerMock组合。
powermock-mockito-junit-1.6.3.jar