web-dev-qa-db-ja.com

いつ単体テストを開始すべきですか? (どの開発段階か?)

私は現在、ユニットテスト、特にJUnit(with Java)について学習しています。

Webを検索すると、なぜそれを使用する必要があるのか​​、どのタイプのメソッドを使用する必要があるのか​​について話しているスレッドがたくさんありますが、ユニットテストを実装する必要があるwhenについて多くの情報を見つけることができないようです。

プロジェクトの最初から組み込んで、作成するすべてのメソッドで単体テストを追加するのが最善ですか。それとも、プログラムのロジック/構造が完成に近づいた後の段階に向けて行われることですか?

7
benscabbia

ユニットテストは、コードを記述するときのすぐ近くに記述する必要があります。 「タイムリー」は、クリーンコードごとの単体テストの5つの中心的な信条の1つです。単体テストを書くことを提唱するアプローチもありますbeforeコード。それは、あなたが話している相手に応じて、テスト駆動またはテスト最初の開発と呼ばれます。

私の経験では、作業が全体として「完了」と見なされる前にテストが実行される限り、テストが最初または2番目に実行されてもそれほど問題ではありません。つまり、単体テストdoneを実行して、ストーリー/タスクが完了したと見なします。

コードを実行する直前にテストを実行すると、次のことが可能になります。

  • コードが何をすべきかをよく覚えているので、より良いテストを書いてください。また、コードがどのようにそれを実行するかを覚えているので、単体テストでバグが見つかったら、バグをすばやく修正できます。
  • 他の人があなたのコードを使用する前に、より早くバグをキャッチします。バグを早期に発見することは、修正するのに費用がかからないことを意味します。
  • 「ああ、後でやる」という罠にはまらない。
18
Telastyn

作成するクラスの概念がわかったらすぐに単体テストを開始できます。 「ユニット」の意味は、プログラミング言語によって異なります。たとえば、ローマ数字を解析する関数を作成するとします。あなたはこのユニットテストから始めるかもしれません:

public class RomanTest {
  public void iEquals1() {
    assertEquals(1, Roman.toInteger("I"));
  }
}

Romanクラスを作成していないため、テストはコンパイルされません。だからあなたは書く:

public class Roman {
  public static toInteger(String s) {
    return 1;
  }
}

わあ、最初のテストに合格しました。

4
kevin cline

コードの記述を開始したら、テストの記述を開始する必要があります。

重要な部分は、記述するコードはすべてユニットテストによる駆動であることです。手動でコードをステップ実行する代わりに、テストで実行します。コードをステップ実行するよりも、テストを書くのにそれほど多くの作業は必要ありません。

新しく作成したコードを実行するテストを作成することにより、基本的にその作業をキャプチャします。コードを手動でテストする場合、そのすべての努力は単にイーサに散らばります。たとえば、6か月以内にあなたまたは別のプログラマがコードを破った場合、そのテストはそこにあり、テスト作業を繰り返す必要がなくなります。これは、単体テストがリグレッションから保護する方法です!

時間の経過とともに、単体テストを作成する利点がわかります。 1つの例として、コードをリファクタリングすると、ユニットテストで何か問題があったかどうかがわかります。

1
esoterik

もし私があなたなら Test-Driven Development メソッドを使うでしょう。

これは非常に簡単です。メソッドが存在する前に単体テストを行い、テストを実行します。彼らは失敗します。次に、メソッドを機能させることで修正します。

0
Insecurefarm

早く始めて!なぜ待つ?

システムが単純な「Hello、World!」よりも複雑になると、アプリケーションでは、ユニットテストの記述を開始して、コーディングした内容が正しく機能することを確認できます。ビルドにmavenのようなツールを使用する場合、ビルドごとにテストを実行できるため、新しく作成されたコードに既存のコードの問題があるかどうかをすぐに知ることができます。