コードを書く前にテストケースを書く方法を学びたい。私はテスト駆動開発に関する記事を読んでいます。開発者がどのようにテストケースを書くのだろうか?例:テストケースを書くには?
public int divideNumbers(int num1, int num2)
{
return num1/num2;
}
コードを書く前にテストケースを書く方法を学びたい。私はテスト駆動開発に関する記事を読んでいます。開発者がどのようにテストケースを書くのだろうか?例:テストケースを書くには?
public int divideNumbers(int num1, int num2)
{
return num1/num2;
}
ここから空白のプロジェクトを開始します。あなたは何かしたい、2つの数字を分割すると言う。だから、あなたはあなたが何をしたいのか記述するテストを書く:
Assert.That(divide(10,2), Eq(5))
このテストは、あなたのエントリポイントを与える:それはdivide
法の許容可能なインタフェースについて説明します。たとえば、int divide(int x, int y)
として実装します。
コードから取得する予定の内容を記述したテストを作成します。あなたはそれについて多く考える必要はありません。あなたの期待を書いていくための最も普通の方法は、おそらくあなたのコードを設計する最良の方法でしょう。そして、それをあなたのテストを満たすために実装することができます。
テストの手順はいくつかあります。 MSDN
から;あなたのケースでは
。
Assert.AreEqual(divideNumbers(8, 4), 2);
Assert
クラスはtrue
/false
命題を使用してユニットテストの状況を検証します。結果を期待するものをテストケースに書き込む必要があります。テストメソッドにはTestMethod
属性を使用できます。 Creating Unit tests for your c# codeについての素晴らしい投稿があります。それを非常によく分析してください。
実際に私が尋ねたいのは、あなたがcodeprojectから共有したリンクの答えがあるということです。ありがとう。 – cihata87
理論と実践の違いを実現することから始めます。
実際のシステムでは、TDD経由で簡単に作成されたものとそうでないものがあります。
最後のグループは、環境上の前提を抽象化しようとはしないが、これらを実際に受け入れるシステムで作業する場合、環境に依存するすべてのものです。
このグループはTDD方式で開発できますが、ソフトウェア工場に追加のツールと拡張機能が必要になります。
の場合、これはMS仮想テストラボやSpecFlowなどのツールと拡張機能です。
私が通信しようとしているのは、です。それはに依存しています。
非常に単純なコンポーネント/単体テストの場合、テストするコードを書く前に失敗したテストケースを作成し、テストが正常に実行されたら開発を終了することが考えられます。
統合テストおよびそれ以降(システムテスト)では、何をテストするかを検討するだけでなく、テスト環境を既知の状態にする方法も考慮する必要があります。
開発したい関数/クラス/コンポーネントのスタブから始めます。それはコンパイルする必要がありますが、意図的に(まだ)行うべきことはしません。例えば
:
public int divideNumbers(int num1, int num2)
{
throw new NotImplementedException();
}
又は
return -42;
はブラックボックスへのインタフェースとしてスタブを治療、意図行動について考えます。実装については気にしないでください(まだ)。インターフェイスの "契約"について考えてみましょう.Xが入り、Yが出ます。
標準的なケースと重要なegdeケースを特定します。それらのためのテストを書く。
整数除算の場合(実際にはゼロから書き出すと仮定します)、実際には2つのケースが考えられます。剰余あり/なし、n/1、n/0、0/n、0/0、
Assert.IsTrue(divideNumbers(4,4) == 1);
Assert.IsTrue(divideNumbers(4,3) == 1);
Assert.IsTrue(divideNumbers(4,2) == 2);
Assert.IsTrue(divideNumbers(4,1) == 4);
Assert.Throws<ArgumentException>(() => divideNumbers(4,0));
Assert.IsTrue(divideNumbers(0,4) == 0);
Assert.Throws<ArgumentException>(() => divideNumbers(0,0));
Assert.IsTrue(divideNumbers(4,-2) == -2);
Assert.IsTrue(divideNumbers(-4, 2) == -2);
Assert.IsTrue(divideNumbers(-4,-2) == 2);
Assert.IsTrue(divideNumbers(4,-3) == -1);
Assert.IsTrue(divideNumbers(-4, 3) == -1);
Assert.IsTrue(divideNumbers(-4,-3) == 1);
単体テストをコンパイルして実行します。彼らはすべて失敗ですか?そうでない場合、なぜですか?テストの1つが意図したとおりに動作しない可能性があります(テストはバグかもしれません)。
これで、もうテストが失敗しなくなるまで実装を開始します。
あなたはテストの前にコードを書いていることをご存知でしょうか? :) – Rafal