Moq,设置存根和预期结果

时间:2012-12-17 10:10:20

标签: moq

我正在创建一个模拟和存根。 存根是以下合同:

public interface IMailService
{
   void SetCredentials(ICredentials credentials);
   bool Connect();
}

我的断言如下: “将正确的凭据传递给IMailService,将成功连接”。 所以我创建了我的模拟对象:

var mockAdapter = new Mock<IMailService>();

现在我应该准备这个适配器。如果使用正确的凭据调用SetCredentials方法,则Connect()方法应返回true。否则它将返回false。

我只是不确定如何使用Moq设置此行为。

1 个答案:

答案 0 :(得分:1)

您需要进行2次测试才能涵盖此问题,其中一项Connect返回true,另一项则返回false

[Fact] // or [Test] depending on your testing framework
public void MailServiceConnectsIfCredentialsAreValid()
{
    var mockMailService = new Mock<IMailService>();
    mockMailService.Setup(x => x.Connect()).Returns(true);

    // The rest of your code which will use the mockMailService.Object...
}

[Fact]
public void MailServiceFailsToConnectIfCredentialsAreInvalid()
{
    var mockMailService = new Mock<IMailService>();
    mockMailService.Setup(x => x.Connect()).Returns(false);

    // The rest of your code which will use the mockMailService.Object...
}

出于测试目的,您不关心ICredentials传递的内容。您只是涵盖IMailService.Connect()的两种可能性,它返回truefalse。确定将发生的实际逻辑将存在于IMailService的实际实现的测试中。

您还可以废弃SetCredentials方法,只需将ICredentials传递给Connect

bool Connect(ICredentials credentials);