3

私はSystem.IO.FileSystemWatcher自分のサービスの1つでを使用しています。監視対象のファイルが変更されたときに通知が届くかどうかをテストしたいと思います。

バックグラウンドスレッドでファイルを変更することを考えていました。テストでは、私はそのスレッドに参加します。次に、正しいイベントが呼び出されたと断言できます。イベントが呼び出された場合にキャプチャするコールバックをサブスクライブできます。

私はスレッドを含むテストを行ったことがないので、これがそれを処理するための最良の方法であるかどうか、またはテストに役立つMoqまたはMSpecに組み込まれた方法があるかどうかはわかりません。

4

1 に答える 1

2

MoqまたはMSpecには、テストの整理に役立ついくつかの興味深い構文または機能を除いて、これを行うのに役立つ特別なものは組み込まれていません。私はあなたが正しい道を進んでいると思います。

あなたのサービスがファイル変更通知をどのように公開するのか興味があります。テストのためにそれらを公開していますか?それともFileSystemWatcher、サービス内に完全に隠されていますか?サービスが単にイベント通知を出し入れしない場合は、簡単にテストできるようにファイル監視を抽出する必要があります。

.NETイベントやコールバックなどでそれを行うことができます。どのように行っても、私はこのようなテストを書きます...

[Subject("File monitoring")]
public class When_a_monitored_file_is_changed
{
    Establish context = () => 
    {
        // depending on your service file monitor design, you would
        // attach to your notification
        _monitor.FileChanged += () => _changed.Set();

        // or pass your callback in
        _monitor = new ServiceMonitor(() => _changed.Set());
    }

    Because of = () => // modify the monitored file;

    // Wait a reasonable amount of time for the notification to fire, but not too long that your test is a burden
    It should_raise_the_file_changed_event = () => _changed.WaitOne(TimeSpan.FromMilliseconds(100)).ShouldBeTrue();

    private static readonly ManualResetEvent _changed = new ManualResetEvent();
}
于 2013-02-05T20:24:05.743 に答える