1

私は現在、うまくいけば、2 つの個別の同じ名前のクラスの結果を比較するために使用されるシステムを開発しています。2 つのクラスを比較することで、入力パラメーターが同じ場合に、最初のクラスのメソッドからの出力が 2 番目のクラスのメソッドからの出力と同じかどうかを判断できることを願っています。

2 つの独立したクラスで同じテスト クラスを動的に実行するにはどうすればよいですか?

疑似コードの例:

簡単なテストクラスがある場合...

class TestClass{
   public int TestMethod(int num){
   int num2;
   TestedClass t = new TestedClass();
   num2 = t.add(num);
}

そして、テストする必要がある2つの同一のクラス...

class TestedClass{
    public int add(int num){
    num = num + 2;
    return num;
}

class TestedClass{
    public int add(int num){
    num = num + 4;
    return num;
}

2 つの異なる TestedClass に対して TestClass を実行し、テストの結果を何らかの形式のコレクションに保存するにはどうすればよいでしょうか。

ご覧のとおり、2 つの TestedClass は同じ名前で、戻り値の型も同じですが、機能がわずかに異なるだけです。また、TestedClass を変更する権限もありませんが、プログラムやパッケージなどのどこに配置するかを制御できます。

前もって感謝します。

編集:

非常に重要な情報を非常に巧妙に見逃していたようです。

また、TestClassを編集するアクセス権もありませんが、上記のように、クラス/メソッド名を知っていて、それらがどこにあるかを制御できます。アイデアは、入力のコピーと正しい出力 (TestClass と他の TestedClass) を指定して、クラスを動的にテストできるものを構築することです。

混乱をお詫び申し上げます。

EDIT 2: テストにアクセスできます。たとえば、いくつかの回答が提案されているように、それらを実行できますが、編集することはできません。

4

3 に答える 3

5
foo.bar.TestedClass   c1 = new foo.bar.TestedClass();
baz.plugh.TestedClass c2 = new baz.plugh.TestedClass();
assertEquals(c1.add(42), c2.add(42));

編集

同じ JVM で 2 つのテストを実行する必要はありません。メソッドを呼び出し、出力を保存し、さまざまな手法を使用して比較するだけで済みます。または、古い JUnit と同じ方法でクラスをスキャンし、Class.forName("...").newInstance()リフレクションを介してインスタンス化し、メソッドを実行することもできます。

于 2012-08-23T13:09:35.357 に答える
0

addメソッドを宣言するインターフェイスを作成し、ファクトリ メソッドパターンを実装して、このインターフェイスのさまざまな実装を提供する必要があります。

これに対処するためのより高度な方法は、Guiceなどの Injection Dependency ライブラリを使用することです。

于 2012-08-23T13:16:03.343 に答える
0

2 つの TestedClasses で同時に TestClass を実行する場合を除き、テストする必要がある目的の TestedClass が最初になるように、クラスパスに jar を配置するだけです。お役に立てれば。

于 2012-08-23T13:34:36.533 に答える