首页 > 解决方案 > 我如何从这个模拟服务中获得结果?

问题描述

如何从模拟服务中获得结果?注意:它可以正常工作。我只是想让考试继续进行。

服务:

    public interface ISendgridService
{
    Task<Response> SendAsync(IEmailMessage emailMessage);
}

// 考试

        [TestMethod]
    public async Task SendEmailTest()
    {
        // Arrange
        var mockSendgrid = new Mock<ISendgridService>();

        var response = new Mock<Func<SendGrid.Response>>();

        mockSendgrid.Setup(s => s.SendAsync(It.IsAny<IEmailMessage>()))
            .ReturnsAsync(response.Object.Invoke);

        var emailMessage = _builder.CreateNew<EmailMessage>()
            .With(e => e.From = _sendgridConfiguration.SenderEmail)
            .With(e => e.FromName = _sendgridConfiguration.SenderName)
            .With(e => e.To = Faker.Internet.Email())
            .Build();


        // Act
        var result = await mockSendgrid.Object.SendAsync(emailMessage);

        // Assert
     // result is null // How do I get a value?
    }

标签: c#.net-core

解决方案


我对您要测试的内容有些困惑。通常,您会针对被测的具体类而不是存根对象执行操作。

伪代码如下:

public class SendGridService : ISendGridService {
  public async Task<bool> SendAsync() {
    //code that sends the email
  }
}

你的测试就像:

//Act
var subject = new SendGridService();
var result = await subject.SendAsync();

//Assert
Assert.IsTrue(result);

推荐阅读