7

インターフェイスの動作を自動的にテストできるものはありますか (特に Java 用)。例として、Comparable を実装するものすべてに適用されるはずの Comparable インターフェースのテストがたくさんあるとします。私が望むのは、Comparable を実装する任意のクラスのテスト フィクスチャに「ComparableTests」を自動的に含めることができるようにすることです。これが汎用インターフェイスで機能する場合のボーナスポイント。

.NET フレームワークmbUnitにも同様の機能があることは知っています。TestNG のジェネレーター関数のようなものを使用している場合は、Comparable のテスト フィクスチャをセットアップし、Comparable を実装する各クラスのインスタンスをジェネレーターに作成させることができます。しかし、私はそれを自動化し、各クラスのテストフィクスチャに配置したいと考えています(そのクラスの他の部分をテストするためにすでにそれらを持っているからです)。

明確化:私は間違いなくこのようなものを構築できます。すでにこれを可能にする何かがあるかどうかを尋ねていました。

4

4 に答える 4

1

最後の段落に基づいて、特定のクラスを既にテストしているため、ユニットテストに「追加のメソッド」を挿入しようとしています。クラスの階層に基づいてテストをアタッチできるテスト ハーネスを知りません。

ただし、似たようなものを構築するために TestNG を使用するという独自の提案があれば、非常に近いと思います。クラスを「デフォルトのテストクラス」のリストに追加する基本コードを組み込むことができます。これらのクラスは、特定のインターフェースを実装しているかどうかがテストされます。

それでも、一般的なケースに関しては、運が悪いと思います.Java型システムは一方向であるため、(簡単に)クラスが実装するインターフェースを見つけることしかできず、その逆はわかりません。さらに、問題は「どこで探すのをやめるべきか」です。すべての実装者をチェックするテストがある場合、Java 環境にあるため、 のcomparable有効性もチェックしますか?String

于 2008-09-20T23:45:57.367 に答える
1

これを試して ください http://www.xmlizer.biz/java/classloader/ClassList.java

于 2009-07-14T22:26:07.977 に答える
0

1つの方法は、jarファイルですべての.classファイルを検索(またはclassesディレクトリで検索)し、Class.forName()メソッドを使用してクラスファイルをロードし、MyInterface.class.isAssignableFrom(myClass)を確認することです。

これは、パブリック内部静的クラス(クラスファイル名を解析できます)を簡単に処理することはできませんが、プライベート内部クラスまたは匿名内部クラスでは機能しません。

于 2008-09-20T20:07:04.303 に答える
0

.NET では、アセンブリを調べて各クラスの継承/実装階層を識別するメソッドを設定するのは非常に簡単です。Java リフレクション API を調べれば、Java でもできると思います。

次に、 の配列を作成し、ITargetInterfaceそれぞれに対してテスト メソッドを呼び出すことができます。

于 2008-09-20T19:44:47.260 に答える