Я новичок в мире async/await, и я пытаюсь понять преимущества написания асинхронных модульных тестов для асинхронных методов. То есть, должен ли единичный тест для метода асинхронного вызова асинхронным способом асинхронного метода? Если он синхронно вызывает метод асинхронного использования Task.Run(), что потеряно? В последнем случае покрытие кода не влияет, насколько я вижу.Неправильно ли вызывать синхронно вызов асинхронных методов в модульных тестах?
Причина, по которой я прошу об этом, заключается в том, что наше насмешливое программное обеспечение (мы используем TypeMock) не может поддерживать async/wait. (They say there is a legitimate reason за это отсутствие поддержки, и я не согласен с ними.) При вызове методов асинхронного синхронного тестирования в модульных тестах мы можем решить эту проблему. Тем не менее, я хотел бы узнать, разрезаем ли мы любой угол, делая это.
Например, предположим, что у меня есть следующий метод асинхронного:
public async Task<string> GetContentAsync(string source)
{
string result = "";
// perform magical async IO bound work here to populate result
return result;
}
Следующие является идеальным тестовым модулем, который не работает:
[TestMethod()]
public async Task GetContentAsyncTest()
{
string expected = "thisworks";
var worker = new Worker();
// ...mocking code here that doesn't work!
string actual = await worker.GetContentAsync();
Assert.AreEqual(expected, actual);
}
Но это работает, и это делает предоставить необходимый нам код. Это нормально?
[TestMethod()]
public void GetContentAsyncTest()
{
string expected = "thisworks";
var worker = new Worker();
// mocking code here that works!
string actual = Task.Run(() => worker.GetContentAsync()).Result;
Assert.AreEqual(expected, actual);
}
Я не являюсь поклонником этого вопроса; название немного шире. В большинстве случаев вы не проверяете, не занималось ли что-то X длинным или Y длинным, вы просто говорите: «Если это сделано, убедитесь, что это произошло» или «Убедитесь, что это произошло, если оно не удалось». Является ли это Async или нет, не вступает в игру в подавляющем большинстве случаев. –
Асинхронная обработка в основном для освобождения пула потоков или рабочих процессов IIS – saj
@George Stocker Я знаю, но тот факт, что я вижу примеры тестов асинхронного модуля, заставляет меня думать, что есть причина, по которой люди пишут их. Что вы предлагаете для названия тогда? Разве вы не можете дать мне шанс улучшить его до того, как он начнется? Чуть-триггер счастлив? – Zoomzoom