我正在使用Mockito编写一些单元测试,当我尝试模拟EntityManager并运行单元测试时,会出现以下错误:
java.lang.ClassFormatError:方法中的Absent Code属性在类文件javax / persistence / LockModeType中不是本机的或抽象的 at java.lang.ClassLoader.defineClass1(Native Method) ....
堆栈跟踪我有以下代码的行:
private EntityManager entityManager = mock(EntityManager.class);
非常感谢任何帮助。
Flavio
答案 0 :(得分:4)
可以通过以下链接解答您的问题。
答案 1 :(得分:2)
不要模拟您不拥有的类型,尤其是实体管理器,而是编写集成测试。你可以使用Arquilian,H2等东西来帮助你编写这些集成测试。
进一步阅读
对不起,我对这个答案并没有真正的帮助,但这对于你不拥有的类型来说是个坏主意。
答案 2 :(得分:0)
从您的问题中不清楚EntityManager
是您自己的某个类,还是外部库中的某个类。
如果是前者,我建议你在这里发布代码,这样我们都可以看到问题所在。否则,我们只是在猜测。
如果是后者,我的下一个问题是你是否使用了包装类。也就是说,您应该考虑编写一个名为EntityManagerWrapper
(或类似的)的类,其中EntityManager
为字段,并公开您希望使用的EntityManager
的所有方法。 EntityManagerWrapper
的每个方法应该只有一行或两行,除了调用EntityManager
的正确方法之外什么都不做。然后重构使用EntityManager
的所有代码,以便它使用EntityManagerWrapper
代替。
不需要单元测试EntityManagerWrapper
,因为它不包含自己的逻辑。但是,当您对使用它的其他类进行单元测试时,您可以轻松地模拟EntityManagerWrapper
。这应该可以解决你的问题。
如果不清楚必须做什么,请随意评论这个答案。