問題なく動作する JUnit テストがあります。ビルドに Mockito を追加し、Mockito を使用していくつかのパブリック メソッドをモックする JUnit テストにブレークポイントを設定しようとしました。クラスでデバッガーを実行しようとすると、「行番号属性が見つからないため、XXX にブレークポイントをインストールできません。コンパイラ オプションを変更して、行番号属性を生成してください。」というエラーが表示されます。コンパイラを確認したところ、行番号を生成するが選択されています。
6 に答える
表示されている例外は、mock()関数によって作成された、動的に生成された空のモック メソッドをデバッグしようとしたことが原因です。あなたの質問から、一部のメソッドのみがモックされ、残りの呼び出しが実際の実装に委譲される完全なモックではなく、部分的なモックを実際に使用したいようです。
部分モックを作成するには、 mock()メソッドの代わりにspy()メソッドを使用する必要があります。だから、使う
MyClass myMock = spy(new MyClass());
それ以外の
MyClass myMock = mock(MyClass.class);
ブレークポイントを削除して再度追加してみてください。現在のブレークポイントが古いバージョンのクラスを参照している可能性があります。それだけ!
Mockito グループのこの投稿が役立つかもしれません。
同じメッセージがあります (Eclipse Luna)。
多数のエラー メッセージが表示されますが、デバッガーがブレークポイントに到達した場合でも、デバッグは機能しています。それらすべてで「OK」をクリックするか、これらのメッセージを無効にするだけです。
この問題は、拡張されたクラスにブレークポイントを配置すること (mockito はおそらくモック化されたクラスを動的に拡張している) と、Eclipse がソース コードを追跡できないことが原因であると思います。
Mockito を使用している場合にのみ発生する場合は、Mockito がデバッガーのサポートなしでコンパイルされた可能性がありますか?
また、テスト クラスのコンパイラ設定が通常のコードと同じであることを確認してください。
この質問が古いことに加えて、今日も同じ問題があり、解決策は非常に簡単でしたが、理解するのに時間がかかりました。したがって、これは、ここでつまずいた人の助けになるかもしれません。
古いブレークポイントが設定されていて、そのうちの 1 つが変更されたコードを指していたため、記録されたブレークポイントの位置が適切ではなくなりました。
私のアドバイスは、問題のあるブレークポイントをすべて削除して、現在のコードに再インストールすることです。クリーン ビルドの後、必ず最新のバイナリを指すようにしてください。:)