2016-11-22 16 views
2

Java7でコンパイルされたコードで静的テストを偽装する際に問題が発生します。Java7の構造で静的メソッドをモックするとPowerMockの問題が発生する

私は中ならば、それは

java.lang.VerifyError: JVMVRFY012 stack shape inconsistent [...] 

を返す私のテストを実行している場合は、注釈

@RunWith(PowerMockRunner.class) 
@PrepareForTest(StaticClassToMock.class) 

と私のJUnitテストに注釈を付けると

PowerMockito.mockStatic(StaticClassToMock.class); 

と私の静的クラスをモックしようとしていますStaticClassToMock私はJava7のコンストラクトを、ORにキャッチされた例外を置き換えて削除します。カスケードで裾がうまく動作します。

私は、Powemock(1.6.6)の最後のバージョンがJava6でコンパイルされていることを知りました。

はPowerMockがJava6のしてコンパイルされたときに構築Java7に関連する私の問題ですか?その奇妙なエラーを歓迎 - PowerMockとの事です

おかげ

答えて

1

最初の質問は、IBM JDKを使用していますか? IBM JDKとPowerMockは、Oracle/OpenJDKとPowerMockよりも "奇妙な"ものになるためです。あなたには、いくつかの検索を行う場合

、潜在的なヒントがたくさん周りにあります

  1. VerifyError on WAS
  2. Code not working with Java7

とにかく、最初の答えは次のようになります。使用してJVMを実行している場合は、単純にしてみてください-noverifyは違いがあります。

あなたが変更できないサードパーティのコードをテストしている場合を除き、より長い答えです。あなたがPowerMockに向かう方法で静的コードを使用しないでください。

ご覧のとおり、スタティックは、まずの異常から良いOOデザインです。細心の注意を払って使用する必要があります。それはあなたのコードに多くの直接の結合を置くので。そして、簡単に言えば:静的を使用することは、テストするのが難しい/不可能なコードを作成する簡単な方法の1つです!したがって、コードを変更するオプションがある場合は、を見てtestableコードを最初に作成する方法を知ることができます。 PowerMockに切り替える必要がありますが、単に消えるだけです。

私の個人的な2セント:私はこのようなPowerMockの問題を捜し出すのに多くの時間を費やしてきました。それで、私たちは通常の単体テストを壊さないように、という静的なの内容しか許さないさまざまなデザインを行うことにしました。それ以来、私たちはEasyMockとMockitoで暮らしています。PowerMockはもう必要ありません。 何もありませんでしたデバッグ問題に時間を費やす必要はありません私たちの生産コードとは関係ありません。嘲笑の枠組みだけです。

+0

ありがとうGhostCat、私は完全に静的コードとIBM JDKについてのあなたの点について同意します。 残念ながら、IBMコードを拡張していて、既存のコードを変更する方法はありません。 とにかく私はこのことを解決することができました。それはoldjavassistライブラリが原因でした。それを新しいものにアップグレードすると、私の問題が解決しました。どうもありがとう! – flavio

+1

あなたは大歓迎です。あなたのアップデートにも感謝します! – GhostCat

関連する問題