IDisposableを実装しているオブジェクトをNUnitで破棄してもクリーンアップできませんか?メソッド内にオブジェクトを配置する方法はさまざまですが、たとえば、オブジェクトが破棄される前にメソッドが失敗した場合など、NUnitはそれを処理しますか? (参考のため、私はv2.6以上です)IDisposableを実装するオブジェクトをNUnitで破棄しますか?
IDisposableを実装するオブジェクトが作成されているが、作成時に例外がスローされると主張している特定の理由があります。テストが失敗し、オブジェクトが作成された場合、私はメモリリークの問題に遭遇したくありません。
例:私はこれが動作することを実現
//Will the StreamReader instance here be disposed
//Of if the assertion fails, and the instance is created?
Assert.Throws<Exception>(() => new StreamReader(filename));
:
Assert.Throws<Exception>(() =>
{
using (StreamReader sr = new StreamReader(filename)) { }
}
しかし、NUnitのは、必要なときに処分の世話をする場合、それは単に不要なコードのように思えます。
IDisposableを安全に処理できるように他のものが参照していないことをNUnitが確実に知る方法はありません。アサートが参照されたオブジェクトを誤って処分するケースに遭遇したくない。ただし、テストするのは難しいことではなく、ダミーの使い捨てオブジェクトを作成し、破棄ポイントを設定し、呼び出されたスタックトレースをチェックしてください。 –
@JoachimIsaksson もしテストが互いに依存していないので、NUnitが各テストケースの終わりにすべてのオブジェクトを処理してしまうのではないかと疑問に思っています。テストケースで作成されたものは理論的にはテストは完了です。 私は標準的なIDisposableの慣行に従うのは問題ありませんが、誰かがこれについて決定的な答えを持っているのだろうかと思います。 – user2338408
私は@ジョアキムに同意します。追加するだけで、あなたの質問に 'Assert.Throws(using ...) 'を使うのではなく、おそらくオブジェクトを破棄するための' [TearDown] 'を追加する方がいいでしょう。 – Chris