Я использую System.IO.FileSystemWatcher
в одной из своих служб. Я хочу проверить, что при изменении отслеживаемого файла я получаю уведомление.
Я думал о том, чтобы фоновый поток изменил файл. В тесте я бы присоединился к этой теме. Тогда я могу утверждать, что вызываются правильные события. Я мог бы подписаться на обратный вызов для захвата, если событие было вызвано.
Я не проводил никакого тестирования с участием потоков, поэтому я не уверен, что это лучший способ справиться с этим или есть какие-то встроенные способы в Moq или MSpec, которые помогут в тестировании.
1 ответ
В 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();
}
Похожие вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.