Я пытаюсь написать модульный тест для написанного мной метода, который отправляет электронное письмо с помощью SendGrid. Мой метод примерно такой:
public async Task SendEmail(TemplatedMailMessage emailMessage)
{
if (String.IsNullOrWhiteSpace(emailMessage.Html) || String.IsNullOrWhiteSpace(emailMessage.From.ToString()) || !emailMessage.To.Any())
{
throw new Exception("Html, From or To is empty");
}
try
{
// Send the email
await this.TransportWeb.DeliverAsync(emailMessage.GetSendGridMessage());
}
catch (Exception ex)
{
//do stuff
}
//log success
}
TransportWeb - это свойство, которое задается в моем конструкторе с помощью параметра, поэтому я могу создать фиктивный объект.
public EmailManager(Web transportWeb = null)
{
this.TransportWeb = transportWeb ?? SetupSendGrid();
}
В моем тестовом методе я пытаюсь имитировать свойство TransportWeb (типа SendGrid.Web):
[TestMethod]
public async Task SendEmail_ValidEmailTemplateAndNoParameters_EmailIsSent()
{
//ARRANGE
var templatedMailmessage = new Mock<TemplatedMailMessage>();
var transportWeb = new Mock<Web>();
transportWeb.SetupAllProperties();
transportWeb.Setup(x => x.DeliverAsync(It.IsAny<ISendGrid>()));
var emailManager = new EmailManager(transportWeb.Object);
//ACT
await emailManager.Send(templatedMailmessage.Object);
//ASSERT
transportWeb.Verify(x => x.DeliverAsync(It.IsAny<ISendGrid>()), Times.Once());
}
Однако я получаю следующую ошибку:
Недопустимая установка на невиртуальном (переопределяемом в VB) члене: x => x.DeliverAsync
Кто-нибудь знает, как я могу это исправить?