2012-02-28 7 views
6

私は単体テストの新機能ですが、特定のテスト可能なタスクを実行するコードの個々のユニットをテストするというアイデアを完全に得ていますが、テストを記述し、50以上のプロパティを持つオブジェクトに作用するメソッドの出力の確からしさを保証する必要があります。これらのプロパティの値の組み合わせは、本質的にパーセンテージに等しいルール定義オブジェクト(ラムダ式を使用して)から注入されたルールに基づいて出力を生成します。これらの出力パーセンテージは「ミッションクリティカル」であり、ルール定義クラスの品質(各ルールの帰属パーセンテージはすべて100%になります)など、これまでより怠惰にテストされていますが、オブジェクトの実際のプロパティはされました。多くのプロパティを持つオブジェクトのユニットテストアドバイス

"data"オブジェクトはデータベースに由来しますが、もちろん私はそれを嘲笑することができます。私の問題は、データx、y、z(奇数指数50倍)が不可能に近づくことを確実にするために、模擬が必要なデータの順列数と書き込まれる必要があるテストの量です。

したがって、問題は実際の意味でどのようにこれらの状況をテスト可能にするかです。スクリプトテストは既知の「正しい」状態と「正しい」結果に基づいて可能であるか分かりやすいでしょうか?この場合、単体テストは適用可能であり、そうでない場合には代替手段が存在します。

ところで、これはリファクタリングの機会が少ないレガシーコードですが、リファクタリングとテストの両方を行うには数日のうちに精度などを保証できる場合のみです!私はあなたがあなたの答えの半分を自分で与えられたと思う

+1

Lol - あなたは私のiPhoneで書いたと信じられますか?あなたは予言的な文章をしています。私が本当のキーボードを持っているときに文法を並べ替えるでしょう:) –

+2

@ S.Lott私たちはまたタイプミスについて肛門ではないようにすることもできますか?そこでは、私はそれを修正しました。 ;) – weltraumpirat

+1

あまりにも厳しいIMHO –

答えて

4

これらのプロパティの値の組み合わせがルールに基づいて出力 を生産するには、ラムダ 式を使用して(ルール定義オブジェクトからを注入し)、それは本質的にパーセンテージに等しい。

現在の単体テストでは、データとルールの両方をマックするととなります。したがって、inメソッドとoutputメソッドが正しく動作することを確認する必要があります。

ルールのテストは別の作業です。私は推測することができますが、通常、このルールの要件を指定するために、可能な入力値と出力値のExcelテーブルなどがあります。私は同じテーブルを読み取り可能な(csv)フォーマットに変換し、それを直接使用してルールの単体テストを駆動します。

2

あなたはどの言語で作業しているのかよく分かりませんが、あなたのプロフィールを見てみると、.Netが関わっている可能性があります。

私がこれに合っていれば、データ駆動型テストの使用をお勧めします。

は、Visual StudioでこれらのDDTでの作業... How to: Create a Data-Driven Unit Test 私はすべての新しいプロジェクトで使用するための新しいバリエーションを発明するstartetdこの記事を読んでいるので:MSDNはでダイシングする私は非常に助けに短いクイックスタートを提供し、テストデータのXML、CSV、またはデータベーステーブルに格納することができます。おそらく、テストに挿入するために必要な値を生成するコードを書くことは可能でしょうか?

マイクロソフトによるPex and Molesプロジェクトでは、テスト対象のシステムを分析し、このベースで自動的にテストデータを生成し、より極端なテストケースを見つけるという2番目のアドバイスがあります。

3

テストケースを生成しようとしているあなたを抱きしめている組み合わせがまったくない場合は、all-pairのテストをご覧ください。

マイクロソフトからPICTを使用して、テストケースの量を最小限に抑えながら、ほとんどのケースをカバーすることができます。

概要

パーティションと ボリューム作成のためのテストスイートを作成したい場合は、ドメインは以下の のパラメータによって記述することができます。タイプ、サイズ、ファイルシステム、フォーマットメソッド、クラスターサイズ、および 圧縮。各パラメータは可能な値の数が限られており、それぞれの性質(たとえば、圧縮 はオンまたはオフのみ)または等価パーティション(サイズなど)によって決定される可能性のある値の数は、 です。

タイプ:プライマリ、論理、シングル、スパン、ストライプ、ミラー、RAID-5
サイズ:10、100、500、1000年、5000、10000、40000
フォーマット方法:速い、遅い
ファイルシステム:FAT、FAT32、NTFS
クラスタサイズ:512、1024、2048、4096、8192、16384、32768、65536
圧縮:オン、オフ

これらの値の4700を超える可能な組み合わせがあります。 は、合理的な時間内にすべてをテストするのが非常に難しいでしょう。 調査によれば、すべての可能な値のペアをテストすると、 のカバレッジが非常に良くなり、テストケースの数が管理しやすくなります。 の例では、{Primary、FAT}は1つのペアであり、{10、slow}は別のペアです。 単一のテストケースは多くのペアをカバーできます。

上記のパラメータセットの場合、PICTは60個のテストを生成します ケース。

取出し点

  • がは
  • PICT 60のテストケース

すべてのペア

を生成する4,700を超える可能な組み合わせであります

プログラムの最も単純なバグは、一般に 単一入力パラメータによってトリガされます。

バグの次の最も単純なカテゴリは すべての対のテストでキャッチすることができるパラメータの対の間の相互作用 に依存するもの から成ります。 三つ以上のパラメータの間の相互作用を含む

バグ同時に がその限界として可能なすべてのの 徹底的な試験を有する徹底的 試験によって見つけることが漸進 より高価である一方、 次第に一般的で 入力。

+0

これは正確に、質問が求めていたものではありませんが、**非常に簡潔で有用な答えではありません。すべてのペアテストの優れた説明と、その利点について説明します。 – mklauber

+0

@mklauber - OPは*「私の問題は順列の数です」*ので、私はすべてのペアのテストがOPに関連すると考えていました。 –