我有以下方法:
public void MoveChannelUp(string channelName)
{
var liveChannels = _repository.GetChannels<LiveChannel>();
var channels = GetModifiedChannelsList(channelName, liveChannels);
_repository.SaveChannels(channels);
}
我想在SaveChannels()调用上设置一个期望值,以便传入正确的channels参数。
我试过了:
channelsRepository.Setup(x => x.SaveChannels(reorderedChannels));
其中reorderedChannels是我期望GetModifiedChannelsList()调用将返回的,但我得到Mock验证异常(可能是因为重新排序的Channels与通道不是同一个对象???)
所以我真的想测试它是GetModifiedChanneslsList()(我知道我可以使用反射来测试它)
那么如何测试正确的频道列表是否传递给SaveChannels()?
答案 0 :(得分: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
将抛出异常,您的单元测试将按预期失败。