XUnit — вызовы вложенных виртуальных асинхронных функций не ожидают ожидания ⇐ 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, я); //Ошибка } }
В моем тестовом проекте 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, я); //Ошибка } }
Мобильная версия