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() 呼び出しが返されることを期待しているものですが、モック検証例外が発生しました (おそらく、reorderedChannels がチャネルと同じオブジェクトではないためですか???)

したがって、私が本当にテストしたいのは GetModifiedChannelsList() です (リフレクションを使用してこれをテストできることはわかっています)

では、正しいチャネル リストが 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このコードが行うことは、チャネルの正しいリストを使用してメソッドが少なくとも1回呼び出されることを確認することです。それが起こらない場合はVerify、例外がスローされ、単体テストは期待どおりに失敗します。

于 2012-05-01T09:35:57.860 に答える