1

モックとスタブを作成しています。スタブは次のコントラクトです。

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

私の主張は次のとおりです。「正しい資格情報をIMailServiceに渡すと、正常に接続されます」。だから私は自分のモックオブジェクトを作成しました:

var mockAdapter = new Mock<IMailService>();

次に、このアダプターを準備する必要があります。適切な資格情報を使用してSetCredentialsメソッドが呼び出された場合、Connect()メソッドはtrueを返す必要があります。それ以外の場合はfalseを返します。

Moqを使用してこの動作を設定する方法がわかりません。

4

1 に答える 1

1

これをカバーするには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);
于 2012-12-17T10:19:40.663 に答える