web-dev-qa-db-ja.com

コンストラクターの単体テスト

クラスを作成する場合、コンストラクターで配列またはコレクションを受け入れますが、この配列またはコレクションはオプションであり(パラメーターはnullにすることができます)、そのコレクションを問題のオブジェクトに格納します。コンストラクターで、次のようなものが必要です。 :

this.coll = coll == null ? null : coll.clone();

そのようなコードを単体テストする必要がありますか? nullを渡すときに機能するかどうかを確認したいですか?

1
Michał Zegan

技術的には、何をテストするかはテスト目標によって異なります。ただし、一般的には、問題が発生する可能性のあるすべてのものをテストする必要があります。ここに:

this.coll = coll == null ? null : coll.clone();
  • collパラメータの使用を忘れた可能性があります。つまり、上記のステートメントが欠落しています。これは、コンストラクタに提供されたcollに依存するテストによって確認できます。

  • パラメータのクローンを作成し忘れた可能性があります。

    this.coll = coll;
    

    これは、パラメーターcollを変更し、その結果をオブジェクト所有のcollと比較するテストで確認できます。変更後は異なるはずです。

  • Nullケースを処理するのを忘れた可能性があります。

    this.coll = coll.clone();
    

    これは、このパラメーターを省略するか、ヌル値を提供するテストで確認できます。通常、例外が予想されますが、ここではnullで問題ありません。

  • 失敗する可能性のあるもう1つのことは、nullが検出されたときにnullオブジェクトまたはデフォルトのインスタンスを作成することです。

    this.coll = coll == null ? new Collection() : coll.clone();
    

    コードが正しい場合は、デフォルトのインスタンスではなく、実際のnullがここにあることを確認する必要があります。

これは、この単純なコード行に適した4つのテストケースです。コードカバレッジツールを使用すると、特にブランチカバレッジも確認する場合に、コードでカバーされていないケースを検出するのに役立ちます。一部のツールでは、式レベルの制御フロー(?:&&||)したがって、ステートメントレベルの条件文を使用する方が適切です(そして、人間にとっても読みやすくなります)。

if (coll != null) {
    coll = coll.clone();
}
this.coll = coll;
4
amon

コンストラクタにnullを渡したときに例外がスローされる場合は、nullを渡して例外が生成されたときにのみ緑色に変わるテストを行うとよいでしょう。

クラスから予想されるほとんどすべての動作は、単体テストの候補です。これはコンストラクターにも当てはまります。

1
candied_orange