我正在创建一个模拟和存根。 存根是以下合同:
public interface IMailService
{
void SetCredentials(ICredentials credentials);
bool Connect();
}
我的断言如下: “将正确的凭据传递给IMailService,将成功连接”。 所以我创建了我的模拟对象:
var mockAdapter = new Mock<IMailService>();
现在我应该准备这个适配器。如果使用正确的凭据调用SetCredentials方法,则Connect()方法应返回true。否则它将返回false。
我只是不确定如何使用Moq设置此行为。
答案 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()
的两种可能性,它返回true
或false
。确定将发生的实际逻辑将存在于IMailService
的实际实现的测试中。
您还可以废弃SetCredentials
方法,只需将ICredentials
传递给Connect
。
bool Connect(ICredentials credentials);