C# 在单元测试中禁用部分功能

C# Disable partly functionality in unit test

我有一个创建用户、存储在数据库中并将其订阅到 Mailchimp 列表的功能。 我有一个测试此功能的单元测试。

现在我确实想测试这个功能,但我不想将 'mocked' 用户添加到邮件列表中。

当一个函数在单元测试模式下 运行 时,有没有办法部分排除代码执行?

例如我有这个功能(简单)

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);
}

现在我想 运行 进行单元测试以测试该功能但不订阅它。 我能想到的最好的方法是在配置文件中使用一个变量并在函数内部读出它。但也许有更好的方法?

一种方法是从 MailChimpAdapter(比如 IMailChimpAdapter)中提取一个接口,然后使用它来模拟构造函数和订阅方法。您可以使用像 Moq 这样的库。

快速检查一下 intro :