2

我有以下方法:

    public void MoveChannelUp(string channelName)
    {
        var liveChannels = _repository.GetChannels<LiveChannel>();

        var channels = GetModifiedChannelsList(channelName, liveChannels);

        _repository.SaveChannels(channels);
    }

我想在 SaveChannels() 调用上设置一个期望,以便传入正确的通道参数。

我试过了 :

   channelsRepository.Setup(x => x.SaveChannels(reorderedChannels));

其中 reorderedChannels 是我期望 GetModifiedChannelsList() 调用将返回的,但我得到了 Mock 验证异常(可能是由于 reorderedChannels 与通道不是同一个对象???)

所以我真正想测试的是 GetModifiedChanneslsList() (我知道我可以使用反射来测试它)

那么如何测试传递给 SaveChannels() 的正确频道列表呢?

4

1 回答 1

3

你可以做这样的事情(我假设有一个类型被调用Channel并且 SaveChannels 的参数是List<Channel>; 用实际替换):

var expectedChannels = new List<Channel> { new Channel() }; // set up expected channels here

var channelsRepo = new Mock<IChannelsRepository>();

// perform your unit test using channelsRepo here, for example:

channelsRepo.Object.SaveChannels(new List<Channel> { new Channel() });

channelsRepo.Verify(x => x.SaveChannels(It.Is<List<Channel>>(l => l.SequenceEqual(expectedChannels)))); // will throw an exception if call to SaveChannels wasn't made, or the List of Channels params did not match the expected.

此代码所做的是验证该SaveChannels方法是否至少使用正确的通道列表调用了一次。如果这没有发生,Verify将引发异常,并且您的单元测试将按预期失败。

于 2012-05-01T09:35:57.860 回答