5

私は次のような方法を持っています

public class ClientClass {

    public void clientMethod() {
        while(true){
           doSomethings.....
       }
    }
}

私はmockitoを使ってテストしようとしています。clientMethod を呼び出すことはできますが、clientMethod 内に while(true) があるため、呼び出しが返されることはなく、(もちろん) clientMethod() 呼び出しの後に発生する assert ステートメントに到達することもありません。テスト ケースからループを 1 回繰り返した後にループを停止する方法はありますか?

4

3 に答える 3

3

技術的には、内部から例外をスローしない限り、テストで無限ループを中断することはできません。ループ内にモックできるものがあれば、例外が発生する可能性があります。

このような状況に陥ったとき、テストに厄介な回避策が必要なときは、立ち止まって設計について考えるときです。テスト不可能なコードは、一般的に保守性が低く、自明ではありません。したがって、私のアドバイスは、無限ループを取り除き、適切なループ条件を導入することです。結局のところ、永久に存続するアプリケーションはありません。

無限ループがここでの最善の方法であると確信している場合は、少し分解してテストを容易にすることができます。

public class ClientClass {

  // call me in production code
  public void clientMethod() {
    while(true){
        doSomethings();
    }
  }

  // call me in tests
  void doSomethings(){
    // loop logic
  }
}
于 2013-09-12T18:44:12.280 に答える