модульное тестирование асинхронного метода проверяет утверждения до завершения метода - PullRequest
0 голосов
/ 28 мая 2019
[TestMethod]
public void TestMethod1()
{
    TestClass testClass = new TestClass();
    testClass.Method();
    Assert.AreEqual(testClass.x, true);
}

И тестовый класс:

public async void Method()
{
    if(cond)
        await InnerMethod();
}

private async Task InnerMethod()
{
    var data = await client.FetchData();
    x = data.res;
}

Я тестирую метод синхронизации этого формата.Но когда я запускаю тест, он проходит через строку var data = await client.FetchData ();

, а затем вместо продолжения выполнения метода сначала переходит к оператору assert в методе test (происходит сбой, посколькуочевидно, это не закончил метод).и ТО продолжается с остальной частью метода.

Я действительно смущен, почему он делает это, но я предполагаю, что это как-то связано с многопоточностью.любые подсказки относительно того, почему это поведение было бы действительно полезным!спасибо

1 Ответ

2 голосов
/ 28 мая 2019

Сделайте ваш метод теста также асинхронным public async Task TestMethod1() и ждите внутри теста await testClass.Method();.Я не уверен насчет MSTest, но он работает нормально с xUnit.

Также, как написано в комментарии ниже, вы должны использовать public async Task Method1().Read Async / Await - лучшие практики асинхронного программирования .

...