C# Частичное отключение функциональности в модульном тесте - PullRequest
0 голосов
/ 08 июля 2020

У меня есть функция, которая создает пользователя, сохраняет его в базе данных и подписывает его на список Mailchimp. У меня есть модульный тест, который проверяет эту функцию.

Теперь я действительно хочу протестировать эту функцию, но я не хочу, чтобы «высмеянный» пользователь был добавлен в список рассылки.

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

Так, например, у меня есть эта функция (simplefied)

public async Task<CreateUserResponse> Create(CreateUserRequest createRequest){
    
    //Save user to database
    var encryptedPassword = encryptor.EncryptPassword(createRequest.Password, salt);
    var user = new UserDomain(){
          EmailAddress = createRequest.EmailAddress,
          Password = encryptedPassword,
          Salt = salt
    }
    _dbContext.Users.Add(user);

    //Subscribe to mailing list
    var mailChimpAdapter = new MailChimpAdapter(_configuration);
    mailChimpAdapter.Subscribe(user);

    return new CreateUserResponse(user);
}

Теперь я хочу запустить модульный тест чтобы протестировать эту функцию, но без подписки на нее. Лучшее, что я могу придумать, - это использовать переменную в файле конфигурации и читать ее внутри функции. А может есть способ получше?

1 Ответ

2 голосов
/ 08 июля 2020

Один из способов - извлечь интерфейс из MailChimpAdapter (скажем, IMailChimpAdapter), а затем использовать его для имитации конструктора и метода подписки. Вы можете использовать такую ​​библиотеку, как Moq.

Проверьте это для быстрого intro :

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