2015-08-25 3 views
0

Это мой текущий тест. Это удается, что должно быть очевидно не do. Как я могу сделать этот тест неудачным?xUnit Асинхронный тест в обратном вызове

[Fact] 
public async Task ExecuteCallback() 
{ 
    Timer timer = new Timer(); 
    timer.Elapsed += (sender, e) => 
    { 
     new MyClassUnderTest((param) => 
     { 
      Assert.Null(param); 
      Assert.NotNull(param); 
      timer.Stop(); 
     }); 
    }; 
    timer.Interval = 500; 
    timer.Start(); 
    System.Threading.Thread.Sleep(1000); 
} 

Я хочу, чтобы проверить внутреннюю логику моего класса (как она выполняет прилагаемые действия и его параметры), и особенно его поведение, когда он работает в EventHandler, так как это делает некоторые сложные вещи с потоками.

+1

Почему вы выбрали этот метод тестирования в первую очередь? Почему вы полагаетесь на «Таймер»? –

+0

Я выбираю этот способ тестирования, потому что он очень близок к проблеме производства, которую я пытаюсь решить. Если бы у меня было бы хоть какое-то высказывание в дизайне, у меня, вероятно, были бы другие проблемы :). У меня также нет опыта в асинхронном тестировании, поэтому я просто скопировал код с ошибкой. Оставлю весь код, который я не хочу тестировать, и вставил некоторые Asserts. Любое предложение о том, как сделать это лучше, ценится. –

+0

В вашем методе нет ничего «асинхронного». Вы просто запускаете объект Timer. Вам не нужно отмечать ваш метод 'async Task' для этого, поскольку вы ничего не ожидаете. Проходит ли таймер? –

ответ

0

Как вы упомянули, обработчик событий Timer работает в другой теме, чем тест NUnit. thrown Exception - NOT, обнаруженный NUnit, поэтому тест завершается успешно.

+1

Да, это все правда. Но это не решает мою проблему. –

+0

За исключением факта, который говорит [Факт], и исключение не улавливается xUnit. –

+0

Assert.Null (..)/NotNull выдает исключение, если оно не выполнено. так как тестовая среда знает, что тест не прошел. –

Смежные вопросы