2

メソッドまたはクラスの単体テストを作成して、そのメソッドのソース コードが特定の Java API メソッド (この場合はArrays.sort) を呼び出さないことを確認するとします。これは可能ですか?これが必要な理由Arrays.sortは、特定のクラスの特定のメソッド内のどこからでも呼び出されたかどうかを検出する自動テストを作成したいためです。その場合、関連するテストに失敗したいと考えています。残念ながら、テキスト ベースのアプローチは、たとえばソース コード コメント内から Arrays.sort への潜在的な参照も検出されるため、まったく満足のいくものではありません。どんな助けでも感謝します。

4

1 に答える 1

0

並べ替え用のインターフェイスと、Arrays.sort を使用する実装を作成することで、それを行うことができます。

public interface SortUtil {}

public class SortUtilImpl implements SortUtil { 
  public void sort(Collection c) {
    Arrays.sort(c);
  }
}

ここで、ソートのために「クライアント」クラスでインターフェースを使用する必要があります。単体テストの場合は、実際の実装をテスト モックに置き換えます。お気に入り:

public SortUtilMock implements SortUtil {
  public void sort( Collection c) {
    StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
    //... here you check if the sort is called by a forbidden method
  }
}

敬具、ジード

于 2013-11-02T23:52:19.417 に答える