4

バイト配列引数を持つメソッドを使用して、一部のクラスの単体テストを作成したいと考えています。合計で約 100 のメソッドがあり、配列のサイズは 5 ~ 10 から数 100 バイトの範囲です。テスト配列を生成して保存するにはどうすればよいですか?

  1. それらを手動で生成する必要がありますか、それともジェネレーターコード (これも単体テストする必要があります) で生成する必要がありますか?
  2. テスト中にメモリに生成する必要がありますか、それとも事前に生成してどこかに保存する必要がありますか?
  3. 後者の場合、それらをファイルに保存する必要がありますか (単体テストがファイル システムに触れてはならない場合でも)、またはテスト コード自体の内部に保存する必要があります (たとえば、次のように 16 進形式の文字列に保存する必要があります: "47 08 00 14 など")?

それらを手動で作成し、テストコードに16進文字列で保存し始めました。私はそのようなバイナリ文字列で多くの作業を行ったので、それらを比較的簡単に読み取ることができます (「コードも表示されません。表示されるのはブロンド、ブルネット、赤毛だけです。」) 問題は、このアプローチが遅いことです。自動ジェネレーターを使用すると、より保守しやすいテストになると思います。しかし、ジェネレーターの出力が正しいことをどのようにテストすればよいでしょうか? キャッチ22みたいだな…

4

4 に答える 4

3

単体テストのジェネレーターとしてMicrosoft のテキスト テンプレートを使用することをお勧めします。プロジェクトに .tt ファイルを追加し、ジェネレーターを実装するだけです。生成は設計時 (テンプレートを保存または変更するとき) に行われ、プロジェクト内に .cs ファイルが生成されます。テストコードは、バイト配列とメソッドごとに 1 つのテストを使用して、通常の「手書き」コードとして処理できます。

ジェネレーターは、バイト配列と期待される出力の定義ファイルも読み込むことができます。ただし、これは設計時に行われるため、単体テストではファイル システムを使用していません。

T4 システム全体は一見の価値があります: T4 テキスト テンプレートを使用したデザインタイム コード生成

...そして、デフォルトで VisualStudio の一部です。何かをインストールしたり、ビルド スクリプトを変更したりする必要はありません。

于 2013-09-18T13:31:06.420 に答える
1

ジェネレーター コードを使用して、各テストの byte[] を取得できます。たとえば、ランダムなサイズの byte[] を生成する単一のメソッドを Test クラスに含めることができます。このようなもの

byte[] GetRandomBytes()
{ 
Random random = new Random();
int randomNumber = random.Next(0, 100);
List<byte> bytes = new List<byte>();
for(int b = 0; b < randomNumber; b++)
    bytes.Add(b);
return bytes.ToArray();
}

ジェネレーターコードは、無効な入力ケースも処理する必要があるため、実際のテストでテストされます(私は推測します)

于 2013-09-18T19:05:33.140 に答える
1


いくつかのアプローチを提案しますが、あなたの場合の方法の例がないため、どれが適切であるか、可能であるかさえわかりません.
メソッドの例を提供し、その動作を説明できれば、役に立ちます。あなたの 100 の奇数メソッドは何をしますか?

1) 100 個の奇数メソッドでバイト配列を操作するロジックをいくつかのヘルパー メソッドにリファクタリングして抽出してみてください。このようにして、ヘルパー メソッドはバイト配列を処理し、シリアル化解除されたオブジェクトを 100 個の奇数メソッドに渡すことができます。これにより、処理にオブジェクトの使用が開始されます。

また

2)個人的には、テストメソッドの隣のコードにバイト配列を配置することを好みます。これは、現在のアプローチです。関数への属性としての入力のいくつかの組み合わせかもしれません (NUnit RowTest 拡張機能を使用します)。これにより、単体テストは他のテストから比較的独立したものになります。パラメータを変更すると、その特定の単体テストのみが影響を受けるはずです。
ジェネレーターの最大の問題は、100 個の奇数メソッドのそれぞれに対してバイト配列を返すためのロジックが非常に複雑になる可能性があることです。ジェネレーターへの変更は、すべての単体テストに影響を与える可能性があります。

単体テストは保守が容易で、独立していなければなりません。ジェネレーターを導入すると、依存関係が追加され、複雑さが増します。

乾杯!

于 2013-09-17T06:13:41.553 に答える