7

外部リソース (Web サービスやその他のネットワーク操作の使用など) と対話するコードを作成する場合、ファイルやその他の入力メソッドを使用して「スタブ化」できるようにクラスを構造化することがよくあります。そのため、スタブ化された実装を使用してシステムの他の部分をテストし、次に Web サービスの呼び出しを具体的にテストする 1 つまたは 2 つのテストを行います。

問題は、Jenkins から、またはプロジェクトのすべてのテスト (「gradle テスト」など) を実行するときに、これらの外部サービスを呼び出したくないことです。一部のサービスには副作用があり、すべての開発者がアクセスできない場合があります。

今のところ、これらの特定のテスト メソッドの @Test アノテーションをコメント解除してから再度コメントして、それらを有効または無効にします。有効にし、手動で実行して確認してから、再度コメントアウトすることを忘れないでください。

// Uncomment to test external service manually
//@Test
public void testSomethingExternal() {

これを行うより良い方法はありますか?

編集:手動の単体テストでは、Eclipse を使用し、テスト メソッドを右クリックして [実行] -> [JUnit テスト] を実行できます。しかし、それは (コメントなしの) 注釈なしでは機能しません。

4

4 に答える 4

7

Junit カテゴリを使用することをお勧めします。詳細については、このブログを参照してください: https://community.oracle.com/blogs/johnsmart/2010/04/25/grouping-tests-using-junit-categories-0 .

基本的に、いくつかのテストに特別なカテゴリにあるものとして注釈を付けて、2 つのテスト スイートを設定できます。1 つはそのカテゴリのテストを実行し、もう 1 つはそのカテゴリのテストを無視します (ただし、他のすべてを実行します)。

@Category(IntegrationTests.class)
public class AccountIntegrationTest {

  @Test
  public void thisTestWillTakeSomeTime() {
    ...
   }

  @Test
  public void thisTestWillTakeEvenLonger() {
     ....
  }

}

個々のテストに注釈を付けることもできます」

public class AccountTest {

   @Test
   @Category(IntegrationTests.class)
   public void thisTestWillTakeSomeTime() {
     ...
    }

何かが手動でオンまたはオフになっているのを見るたびに、私はうんざりします。

于 2013-09-07T21:35:28.720 に答える