Как проверить, что FileSystemWatcher вызывает правильные события?

Я использую System.IO.FileSystemWatcher в одной из моих служб. Я хочу проверить, что, когда файл, контролируемый, изменяется, я получаю уведомление.

Я думал о том, что фоновый поток меняет файл. В тесте я бы присоединился к этой теме. Тогда я могу утверждать, что вызываются правильные события. Я мог бы подписаться на обратный вызов для захвата, если событие было вызвано.

Я не проводил никаких испытаний, связанных с потоками, поэтому я не уверен, что это лучший способ справиться с этим, или если в Moq или MSpec есть встроенные способы, которые помогут протестировать.

4
nl ja de

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();
}
2
добавлено
Пожалуйста, JD. В эти дни мы проводим много подобных тестов. Пожалуйста, продолжайте задавать вопросы MSpec и тестирования!
добавлено автор Anthony Mastrean, источник
Спасибо Энтони, у меня был файл FileSystemWatcher в службе с методами уведомления о событиях, как вы описали. Блестящий ответ облегчает мои тесты.
добавлено автор JD., источник
QA — вакансии и аналитика рынка вакансий
QA — вакансии и аналитика рынка вакансий
5 668 участник(ов)

Вакансии и поиск работы в сфере QA. Вопросы: @qa_ru Про деньги: @qa_fin При размещении вакансии указывать: - должность - компанию - требования к кандидату - условия и ЗП хэштеги: #город #типзанятости

QA — русскоговорящее сообщество
QA — русскоговорящее сообщество
3 625 участник(ов)

Общаемся про все виды тестирования и его автоматизацию. Без мата, грубостей и провокаций. События: @qaevents Вакансии: @qa_jobs Автоматизаторы: @qa_automation Слухи про компании: @qa_bad_company

QA juniors
QA juniors
2 720 участник(ов)

Добро пожаловать в чат джуниоров QA! Общаемся обо всём, что связано с тестированием и не только :) В чате царит дружественная атмосфера, поэтому общаемся без мата, грубостей. @qa_automation - автоматизация @serious_tester - для тестировщиков и QA

QA - Bad Company!
QA - Bad Company!
2 602 участник(ов)

Позитив и негатив про компании или курсы, куда не стоит идти работать или учиться, а куда стоит. За пиратский контент - бан. @qa_fin о деньгах Русскоговорящее сообщество: @qa_ru Флудилка: @qaFlood Вакансии: @qa_jobs Финансы: @qa_fin

QA — Автоматизация
QA — Автоматизация
2 434 участник(ов)

1. Обсуждение технологий автоматизированного тестирования 2. Помощь начинающим Ru-сообщество: @qa_ru Джуночат: @qajuniors Вакансии: @qa_jobs Финансы: @qa_fin Митапы и события: @qaevents Паблики: @serious_tester, @automation_remarks, @atinfo

Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

QA - Finance
QA - Finance
1 347 участник(ов)

Чат о деньгах тестировщиков. ЗП, релокейты,оферы. @qa_bad_company - обсуждение компаний/курсов и карьерного роста для QA @qa_automation - авто QA Холивары, политика, религия-бан Реклама, спам, оскорбления - бан Для флуда используйте другой чат

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot