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!"));

通常,尝试调用属性 getter 会导致NullReferenceException除非SetupGet作为模拟初始化的一部分被调用。这里的问题是,我们不想从 getter 返回固定值,因为它是由测试代码设置的。我们需要财产作为财产,没有起订量。就是SetupProperty这样 - 告诉 Moq 属性设置器/获取器应该保持不变。

于 2013-01-21T13:13:54.590 回答