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();
}