Запуск нескольких модульных тестов с несколькими подключениями к базе данных - PullRequest
0 голосов
/ 19 ноября 2018

В базовом проекте Asp.Net существует несколько модульных тестов, используемых сервисов для подключения к базе данных и получения реальных данных, поэтому создается несколько одновременных подключений. При выполнении этих тестов я получил эту ошибку

Вторая операция началась в этом контексте перед завершением предыдущей операции. Ни один из членов экземпляра не гарантированно является потокобезопасным.

но я не знаю, как я могу исправить эту ошибку без использования асинхронных способов.

1 Ответ

0 голосов
/ 19 ноября 2018

В модульных тестах вы не должны использовать подключение к БД. Вы должны использовать макеты и создавать свои собственные данные для тестирования.

Используйте пакет NuGet moq для простого создания макетов объектов.

Пример использования объектов макета:

public void Test_Login()
    {
        Mock<IDatabase> mockDatabase = new Mock<IDatabase>();
        mockDatabase.Setup(p => p.GetAccountAsync(It.IsAny<string>()))
            .Returns((string givenEmail) => Task.FromResult(new Account(1, "test", givenEmail, "123", "$2b$10$pfsnDQ3IWuY/zER/uBQpedvRFntMNHGOGhOSpABKZ7bwS", false)));

        Mock<IConfiguration> mockConfiguration = new Mock<IConfiguration>();
        Mock<IHostingEnvironment> mockHostingEnvironment = new Mock<IHostingEnvironment>();

        AccountService accountService = new AccountService(mockDatabase.Object, mockConfiguration.Object, mockHostingEnvironment.Object);

        LoginViewModel loginViewModel = new LoginViewModel
        {
            EmailLogin = "test@test.com",
            PasswordLogin = "s"
        };

        Task<Account> account = accountService.LoginAsync(loginViewModel);

        Assert.NotNull(account.Result);
        Assert.Equal(loginViewModel.EmailLogin, account.Result.Email);
    }

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...