2011-02-04 13 views
5

これらの属性を持つメソッドを使用して、テストの開始後に作成されたテストDB内のテーブルからすべての行を削除する一連のMSTestテストケースがあります。毎回私はDB内にある単体テストの行から1行になります。[ClassCleanup]と[TestCleanup]が実行されない状況

私はテストの開始時間を保存しているので、それより新しいタイムスタンプを持つすべてのレコードを削除しているので、クリーンアップコードが呼び出されなかった場合は、レコードが残っていることがわかります。

+0

NUnit、MSTestまたは別のテストフレームワークを指していますか? – adamjford

答えて

4

まず、「ユニットテスト」は技術的にDBに触れてはいけません。しかし、私は統合テストにもNUnitを使用しているので、大したことはありません。

クリーンアップメソッドが完全に実行されない唯一の状況は、クリーンアップ関数にエラーがあった場合、または例外によってランタイムがシャットダウンした場合です。私が知る唯一のものは、スタックオーバーフローとメモリ不足エラーです。デバッガからのテストを中止すると、クリーンアップフェーズもスキップされます。

データアクセス層によっては、DB接続が失われ、クリーンアップ機能が新しいアクセス層を取得できない可能性があります。これは一般的にあなたのDALをより堅固にする必要があることを示しています。また、あなたが期待していない何かがDALを分解させるためにテストで起こっていることを示しています。

+0

少なくともこれらのうちのいくつかは、私が厳密なユニットテストより統合されていると考えているものです。ただプロジェクトを継承しただけで、私はまだ前の開発者が何をしたのかを感じ取っています。私はいつも、純粋主義者たちが、テストで何をすべきか/しないかについて、むしろばかげていると考えました。特に、他の自動テストを実行するための同等のパラレルツールセットがないためです。 DBはローカルホスト上で実行されているため、接続を失うことは私にはあまりありません。 –

+0

さまざまなレベルのテストのルールは、あなたの働く文化にどのように依存しているのですか。主な違いは、単体テストは非常に高速で実行できるため、CIサーバーを使用する際にはすべてのチェックインで実行できます。私は何時間もかかる統合テストスイートを見てきました。 – KeithS

1

テストをデバッグしていて、テストの実行が完了する前にデバッガを停止すると、これは呼び出されません。

関連する問題