1

インターフェースは次のとおりです。

public interface IFacebookChatClient
{
    Action OnLogin { get; set; }
    bool Login(string apiKey, string accessToken);
    void SendMessage(string message, string receiverId);
    void Close();
}

使用例は次のとおりです。

client.Login("...", "...");

client.OnLogin = () =>
{
    client.SendMessage("Testing", "Hello World!");
    client.Close();
}; 

SendMessage単体テストでは、特定の値で呼び出されたことを確認したいと思います。これは可能ですか?

4

1 に答える 1

1

これは、プロパティの動作をプロパティにアタッチすることで可能になりOnLoginます。

var mock = new Mock<IFacebookChatClient>();
// Tell mock to treat OnLogin as regular property
// Second parameter is initial value (doesn't matter in your case)
mock.SetupProperty(m => m.OnLogin, () => { });

// perform test

mock.Verify(m => m.SendMessage("Testing", "Hello World!"));

通常、モックの初期化の一部として呼び出されNullReferenceExceptionない限り、プロパティ ゲッターを呼び出そうとすると、結果は次のようになります。SetupGetここでの問題は、テストされたコードによって設定されているため、getter から固定値を返したくないということです。邪魔にならない Moq なしで、プロパティとして動作するプロパティが必要です。そして、それが何をするかですSetupProperty- プロパティのセッター/ゲッターをそのままにしておくべきであることをMoqに伝えます。

于 2013-01-21T13:13:54.590 に答える