1

メソッドが文字列を入力パラメーターとして受け入れ、この文字列には 1 から 8 までの数字とダッシュ ("/") のみを含める必要があるとします。

テスト駆動型を開発する場合、メソッドが適切な引数チェックを行うことを検証する単体テストをどのように記述しますか?

私が最初に考えたのは、要件を逆にして ArgumentException をテストすることでした。つまり、他のすべての可能な文字を使用してメソッドを呼び出し、ArgumentException を予期するデータ駆動型単体テストを用意することでした。とはいえ、ハンマーでナッツを割るような感じです...

そのような状況のためのベストプラクティスはありますか?

4

2 に答える 2

3

私の最初の考えは、要件を逆にして ArgumentException をテストすることでした

これは、関数が最初に行うべきことです。それがパブリック関数である場合、そうでないことが証明されるまで、そのパラメーターが無効であると想定する必要があります。あなたが述べた要件は、正規表現チェックで非常に簡単にカバーされます-その正規表現が失敗した場合、ArgumentExceptionまたはOutOfRangeExceptionをスローします。

メソッドが適切な引数チェックを行うことを検証する単体テストをどのように記述しますか

ターゲット関数を繰り返し呼び出す 2 つのテスト メソッドだけで十分です。最初のものには、有効なパラメーターを使用した一連の呼び出しがあり、戻り値がある場合は必ず確認してください。
2 番目のテスト メソッドでは、特殊文字、大文字、小文字などを含む文字列を含む一連の無効な入力が起動されます。無効な入力は、テストが失敗する原因となる例外をトリガーする必要があります (このメソッドを次のように装飾する必要があります)。予想される例外属性)。

于 2012-10-14T08:32:04.450 に答える
0

データ ドリブン ユニット テスト (MSDN:方法: データ ドリブン ユニット テストを作成する) を試すことができます。

これにより、XML、CSV、またはデータベース テーブルなどのデータ ソースを定義し、いくつかの種類の可能な入力をそれに入れることができます。単体テストは 1 回だけ書き込まれますが、ソースのデータ行ごとに 1 回実行されます。

たとえば、いくつかの有効な入力文字列を含む CSV ファイルを入力してテストし、別の CSV ファイルに無効な文字列を含む別の CSV ファイルをチェックするテスト メソッド[ExpectedExcetion(typeof(...))](または、この場合はコードが何をすべきか) をチェックすることができます。

これは非常に簡単に実装でき (上記のリンクを参照)、必要に応じて、さまざまな形式で何千もの可能な入力をランダムに生成することもできます。

于 2012-10-16T12:02:02.257 に答える