模拟EntityManager时Mockito的问题

时间:2012-12-17 16:38:02

标签: java mockito

我正在使用Mockito编写一些单元测试,当我尝试模拟EntityManager并运行单元测试时,会出现以下错误:

java.lang.ClassFormatError:方法中的Absent Code属性在类文件javax / persistence / LockModeType中不是本机的或抽象的     at java.lang.ClassLoader.defineClass1(Native Method) ....

堆栈跟踪我有以下代码的行:

private EntityManager entityManager = mock(EntityManager.class);

非常感谢任何帮助。

Flavio

3 个答案:

答案 0 :(得分:4)

可以通过以下链接解答您的问题。

crippled java ee

答案 1 :(得分:2)

不要模拟您不拥有的类型,尤其是实体管理器,而是编写集成测试。你可以使用Arquilian,H2等东西来帮助你编写这些集成测试。

进一步阅读

对不起,我对这个答案并没有真正的帮助,但这对于你不拥有的类型来说是个坏主意。

答案 2 :(得分:0)

从您的问题中不清楚EntityManager是您自己的某个类,还是外部库中的某个类。

如果是前者,我建议你在这里发布代码,这样我们都可以看到问题所在。否则,我们只是在猜测。

如果是后者,我的下一个问题是你是否使用了包装类。也就是说,您应该考虑编写一个名为EntityManagerWrapper(或类似的)的类,其中EntityManager为字段,并公开您希望使用的EntityManager的所有方法。 EntityManagerWrapper的每个方法应该只有一行或两行,除了调用EntityManager的正确方法之外什么都不做。然后重构使用EntityManager的所有代码,以便它使用EntityManagerWrapper代替。

不需要单元测试EntityManagerWrapper,因为它不包含自己的逻辑。但是,当您对使用它的其他类进行单元测试时,您可以轻松地模拟EntityManagerWrapper。这应该可以解决你的问题。

如果不清楚必须做什么,请随意评论这个答案。