XUnit — вызовы вложенных виртуальных асинхронных функций не ожидают ожиданияC#

Место общения программистов C#
Ответить
Гость
 XUnit — вызовы вложенных виртуальных асинхронных функций не ожидают ожидания

Сообщение Гость »


В моем тестовом проекте xunit (2.5.2)/NSubstitute (5.1.0)/C# (Core 6) у меня есть классы репозитория с вызываемыми виртуальными функциями. Я создал произвольный класс с похожей структурой, чтобы воспроизвести мое замешательство.

Если вы запустите тест, вы заметите, что асинхронная функция репозитория не ожидает результата.

Я что-то неправильно понимаю в том, как работает виртуальный (если вы удалите ключевое слово virtual, оно вызывается)?
публичный интерфейс IBugTest { Task TestMethod(); } открытый класс BugTest: IBugTest { частный только для чтения IBugTestRepository _bugTestRepository; общественный BugTest (IBugTestRepository bugTestRepository) {_bugTestRepository = bugTestRepository; } общедоступная виртуальная асинхронная задача TestMethod() { Console.WriteLine($"Меня зовут: {nameof(TestMethod)}"); return await _bugTestRepository.RepositoryTestMethod(); } } общедоступный интерфейс IBugTestRepository { Task RepositoryTestMethod(); } открытый класс BugTestRepository: IBugTestRepository { общественный BugTestRepository() { } общедоступный виртуальный асинхронный Task RepositoryTestMethod() { Console.WriteLine($"Меня зовут: {nameof(RepositoryTestMethod)}"); возврат 1; } } публичный класс BugTest_Tests { частный только для чтения BugTest _sut; общедоступный BugTest_Tests() { Репозиторий IBugTestRepository = Substitute.For(); //Интерфейс не используется в типе «Для», как обычно я бы передал сюда базу данных в памяти _sut = новый BugTest (репо); } [Факт] общедоступная асинхронная задача Reproduce_Bug() { int я = жду _sut.TestMethod(); Assert.Equal(1, я); //Ошибка } }
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»