7

私は JUnit 3 を使用しており、オブジェクトが正しく作成されていることを頻繁にテストする必要がある状況にあります。私の考えは、以下に示すようにクラスを作成しMyTestBase、それから状況固有の単体テスト用に拡張することでした。

ただし、私が示した例ではMyTests、 でテストを実行しませんMyTestBase

public class MyTestBase extends TestCase {
   protected String foo;
   public void testFooNotNull() {
     assertNotNull(foo);
   }
   public void testFooValue() {
     assertEquals("bar", foo);
   }
}


public class MyTests extends MyTestBase {
  public void setUp() {
    this.foo = "bar";
  }
  public void testSomethingElse() {
    assertTrue(true);
  }
}

私は何を間違っていますか?

お詫びを更新。愚かなエラー。基本クラスのテストの名前が正しくありませんでした。

4

4 に答える 4

7

「MyTests は MyTestBase でテストを実行しません。」と言いました。私はそれを試してみましたが、MyTestBase のものを含むすべてのテストが呼び出されました。

于 2010-01-26T07:44:42.270 に答える
3

MyTestBase基本クラスでテストを実行しようとしないように、抽象化することができます。より良い解決策は、基本クラスにあり、後で必要になる変数を初期化するsetUpために抽象メソッド (例: ) を呼び出すようにすることです。getFoo()

実際、これらの抽象メソッドがある場合、そもそもセットアップ フェーズさえ必要ないことに気付くかもしれません。インスタンス変数を使用する代わりに、値が必要な場所で抽象メソッドを呼び出すことができます。明らかに、正確な状況に依存しますが、多くの場合、これはよりクリーンになる可能性があります。

于 2010-01-26T07:42:26.633 に答える
0

あなたがやろうとしていることは、あなたの目標を達成するための最も適切な方法ではありません:

いくつかのチェックを行う共通の機能が必要な場合

  • staticメソッドのユーティリティクラスで定義する
  • スーパークラスで定義し、各テスト メソッドから呼び出す
于 2010-01-26T07:46:23.130 に答える
0

あなたが何をしたいのか正確にはわかりませんが、通常、テストで共通部分が多すぎるのはあまり良い考えではありません.ソフトウェアの小さなバグが 1 つだけです。

Factory または Builder を使用して複雑なオブジェクトを作成し、Factory (または Builder) をテストしてオブジェクトを正しく作成することをお勧めします。

于 2010-01-26T08:13:39.213 に答える