У меня есть простой класс с простым методом, как это:блока тестирования асинхронного код
partial class SimpleClass
{
private readonly ISimpleManager _simpleManager;
public SimpleClass(ISimpleManager simpleManager)
{
_simpleManager = simpleManager;
}
public async void SimpleMethod()
{
IsInProgress = true;
DoSomeWork();
Task<int> hardWork0Task = _simpleManager.DoHardWork0Async();
Task<int> hardWork1Task = _simpleManager.DoHardWork1Async();
DoIndependentWork();
int hardWork0Result = await hardWork0Task.ConfigureAwait(false);
DoDependentWork(hardWork0Result);
int hardWork1Result = await hardWork1Task.ConfigureAwait(false);
DoDependentWork(hardWork1Result);
IsInProgress = false;
}
}
Давайте предположим, что свойство IsInProgress
только bool
свойства уведомления GUI о своем состоянии, чтобы обеспечить освежающий прогресс бар. DoSomeWork
, DoDependentWork
и DoIndependentWork
- это некоторые методы, использующие или не результаты тяжелой работы.
ISimpleManager
самый простой интерфейс, вы можете себе представить, в данном случае:
interface ISimpleManager
{
Task<int> DoHardWork0Async();
Task<int> DoHardWork1Async();
}
я должен написать несколько модульных тестов с помощью Moq и NUnit. Как я могу написать модульные тесты для этого случая? Я хотел бы проверить, не изменилось ли свойство IsInProgress
на false во время всего кода, выполняемого асинхронно с графическим интерфейсом. Имеет ли это смысл? Является ли это возможным? Что делать, если мой метод async
возвращает Task
или общий Task<T>
? Что делать, если я настроюсь на true
?
Вы можете сделать код запуска в течение очень долгого времени, используя заглушки, и тогда вы будете в состоянии поймать состояние в незавершенное. –
Асинхронный метод, который возвращает 'void', является плохими идеями. Я бы предложил удалить свойство IsInProgress и вернуть 'Task'. –
@ Сергий Березовский, ок, насколько я упоминал, я не против использования 'Task' или generic' Task 'вместо' void'. Не могли бы вы показать мне ответ в полном решении только для метода возврата «Задача»? Это было бы полезно для меня. И у меня есть дополнительный вопрос. Если вы разрабатываете тесты для модели просмотра Caliburn, у вас есть некоторые методы, которые должны быть «async void», т. Е. Действие связано с событием нажатия кнопки. Что делать в этом случае? Показать публично метод возвращает 'Задача', кроме метода, возвращающего' async void'? Это звучит не так хорошо для меня, потому что вы меняете свой код сут, чтобы его можно было тестировать. –
pt12lol