3

Mockito で単体テストを書いていますが、EntityManager をモックして単体テストを実行しようとすると、次のエラーが発生します。

java.lang.ClassFormatError: java.lang.ClassLoader.defineClass1(Native Method) のクラス ファイル javax/persistence/LockModeType のネイティブまたは抽象ではないメソッドにコード属性がありません ....

スタック トレースポイントは、次のコードがある行を示しています。

private EntityManager entityManager = mock(EntityManager.class);

どんな助けでも大歓迎です。

フラビオ

4

3 に答える 3

4

以下のリンクがあなたの問題に答えているかもしれません。

不自由なJava EE

于 2012-12-18T11:00:15.147 に答える
3

所有していない型、特にエンティティ マネージャーをモックしないでください。代わりに、統合テストを記述します。Arquilian や H2 などを使用して、これらの統合テストを作成できます。

参考文献

申し訳ありませんが、この回答についてはあまり役に立ちませんが、所有していない型をモックするのは本当に悪い考えです。

于 2012-12-17T17:16:11.620 に答える
0

EntityManagerあなたの質問からは、あなた自身のクラスの1つなのか、それとも外部ライブラリの何かなのかは明らかではありません。

前者の場合は、そのコードをここに投稿することをお勧めします。そうすれば、問題が何であるかがわかります。それ以外の場合は、推測にすぎません。

後者の場合、次の質問はラッパー クラスを使用しているかどうかです。つまり、フィールドとしてを持ち、使用したいすべてのメソッドを公開するクラスEntityManagerWrapper(または同様のもの) を作成することを検討する必要があります。の各メソッドの長さは 1 ~ 2 行で、 の正しいメソッドを呼び出すこと以外は何もしません。次に、 を使用するすべてのコードをリファクタリングして、代わりに を使用するようにします。EntityManagerEntityManagerEntityManagerWrapperEntityManagerEntityManagerEntityManagerWrapper

EntityManagerWrapper独自のロジックが含まれていないため、単体テストを行う必要はありません。EntityManagerWrapperただし、それを使用する他のクラスを単体テストするときに、簡単にモックできます。これで問題が解決するはずです。

何をしなければならないかが十分に明確でない場合は、この回答について自由にコメントしてください。

于 2012-12-18T07:56:23.740 に答える