これをカバーするには2つのテストが必要です。1つはConnect戻り値trueで、もう1つは戻り値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か、という2つの可能性をカバーしているだけですfalse。どちらが発生するかを決定するための実際のロジックは、の実際の実装のテストに存在しますIMailService。
また、メソッドを破棄してSetCredentials、に渡すICredentialsこともできConnectます。
bool Connect(ICredentials credentials);