これは正しく嘲笑されない(したがって、ユニットテストされていない)可能性があります。ポイントは、実際には "this"のメソッドを呼び出すことです。しかし、あなたはいくつかのオブジェクトをテストすることはできません...同時にそれを嘲笑してください。
本番コードは次のようになります場合は、以下を参照してください。
public String getVersion() {
return someObject.getClass().....
}
、あなたはモックオブジェクトを作成することができます。それをあなたのVersionクラスに挿入します。しかし、その場合でもgetClass()メソッドはfinal java.lang.Object内にあります。とにかくそれを嘲笑することはできません。
[EasyMockやMokitoのような合理的な模擬フレームワークは、クラスを拡張し、制御したいメソッドをオーバーライドすることで機能します。 PowerMockのようなバイトコードの操作を行うフレームワークがありますが、このような模倣を可能にしますが、このようなライブラリを使用するべきではありません。彼らは(ほとんどのカバレッジライブラリを破るような)本当に悪い副作用を持っているように]働くかもしれない何
:
class Version {
private final Package packageForVersionCheck;
public Version() {
this(getClass().getPackage()));
}
Version(Package somePackage) {
this.packageForVersionCheck = ...
}
public String getVersion() {
return this.packageForVersionCheck.getImpl....
今、あなたは、その文字列を返す「嘲笑」のパッケージを提供するために、依存性注入を使用することができます。しかし、まあ、それはほとんど利益のためのコードのように見えます。
短いストーリー:時には、合理的な単体テストを書くことができません。それから、次のベストを尽くしてください: "顧客のような"設定で自動的に実行されるいくつかの "機能"テストを作成します。このようなテストを実行するための自動セットアップがあることを確認してください。
あなたはモック/スタブします。 –
あなたは何をテストしていますか?このメソッドのクライアントをテストする場合は、それを含むクラスまたは実装するインタフェースの適切なモックを配線します。メソッドの実装をテストしている場合は、メソッドがnullか、期待されるパターンと一致するかどうかを検証できます。 'getImplementationVersion()'自体をテストしているなら、それを止めてください。それはおそらく独自のテストでサードパーティのコードです。 –