2013-01-03 11 views
8

コードを書く前にテストケースを書く方法を学びたい。私はテスト駆動開発に関する記事を読んでいます。開発者がどのようにテストケースを書くのだろうか?例:テストケースを書くには?

public int divideNumbers(int num1, int num2) 
    { 
     return num1/num2; 
    } 
+1

あなたはテストの前にコードを書いていることをご存知でしょうか? :) – Rafal

答えて

3

ここから空白のプロジェクトを開始します。あなたは何かしたい、2つの数字を分割すると言う。だから、あなたはあなたが何をしたいのか記述するテストを書く:

Assert.That(divide(10,2), Eq(5)) 

このテストは、あなたのエントリポイントを与える:それはdivide法の許容可能なインタフェースについて説明します。たとえば、int divide(int x, int y)として実装します。

コードから取得する予定の内容を記述したテストを作成します。あなたはそれについて多く考える必要はありません。あなたの期待を書いていくための最も普通の方法は、おそらくあなたのコードを設計する最良の方法でしょう。そして、それをあなたのテストを満たすために実装することができます。

1

テストの手順はいくつかあります。 MSDNから;あなたのケースでは

Assert.AreEqual(divideNumbers(8, 4), 2); 

Assertクラスはtrue/false命題を使用してユニットテストの状況を検証します。結果を期待するものをテストケースに書き込む必要があります。テストメソッドにはTestMethod属性を使用できます。 Creating Unit tests for your c# codeについての素晴らしい投稿があります。それを非常によく分析してください。

+0

実際に私が尋ねたいのは、あなたがcodeprojectから共有したリンクの答えがあるということです。ありがとう。 – cihata87

0

理論と実践の違いを実現することから始めます。

実際のシステムでは、TDD経由で簡単に作成されたものとそうでないものがあります。

最後のグループは、環境上の前提を抽象化しようとはしないが、これらを実際に受け入れるシステムで作業する場合、環境に依存するすべてのものです。

このグループはTDD方式で開発できますが、ソフトウェア工場に追加のツールと拡張機能が必要になります。

の場合、これはMS仮想テストラボやSpecFlowなどのツールと拡張機能です。

私が通信しようとしているのは、です。それはに依存しています。

非常に単純なコンポーネント/単体テストの場合、テストするコードを書く前に失敗したテストケースを作成し、テストが正常に実行されたら開発を終了することが考えられます。

統合テストおよびそれ以降(システムテスト)では、何をテストするかを検討するだけでなく、テスト環境を既知の状態にする方法も考慮する必要があります。

1

開発したい関数/クラス/コンポーネントのスタブから始めます。それはコンパイルする必要がありますが、意図的に(まだ)行うべきことはしません。例えば

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つが意図したとおりに動作しない可能性があります(テストはバグかもしれません)。

これで、もうテストが失敗しなくなるまで実装を開始します。

関連する問題