2012-05-01 9 views
2

私は、次の方法があります:私は正しいチャンネルのパラメータが渡されるようにSaveChannels()の呼び出しに期待を設定したいMOQを使用してこのコードをテストする正しい方法は何ですか?

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

     var channels = GetModifiedChannelsList(channelName, liveChannels); 

     _repository.SaveChannels(channels); 
    } 

私が試した:。

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

ここでreorderedChannelsはGetModifiedChannelsList()呼び出しが返すと期待しているものですが、擬似検証例外があります(おそらくreorderedChannelsはチャネルと同じオブジェクトではありません)

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

をテストしたいGetModifiedChanneslsList()で、どのように私は)(正しいチャンネルリストがSaveChannelsに渡されるテストするのですか?

+0

私はMoqにもかなり新しいです。たぶんあなたはMoq 'It'ヘルパーを試してみることができます、私はそれを試しました、ここに例を見てください:http://www.ienablemuch.com/2012/02/primer-on-unit-testing-with-moq.html –

答えて

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は例外をスローし、ユニットテストは期待通りに失敗します。

+0

ありがとう、私は試みました。コールバック()とそれは動作するようですが、私はあなたの解決策が好きです。 Btw、channelsRepo.Object.SaveChannels(new List {new Channel()}); bet channelsRepo.Object.SaveChannels(exceptedChannels}); ?? –

+2

@JD:すでにこれを行っているかもしれませんが、 'Equals'(したがって' ToHashCode')が 'Channel'に実装されていることを確認する必要もあります。さもなければ、私はあなたが論理的平等よりむしろ参照平等を得ると思います。 –

+0

@JD:実際の単体テストでは、channelsRepo.Object.SaveChannelsを明示的に呼び出すことはありません。それはあなたのMoveChannelUpメソッドがそれを呼び出すことを意味し、GetModifiedChannelsListから生じるチャネルを指定します。結局のところ、GetModifiedChannelsListが期待するチャネルのリストを返すことをテストすることです。 – HackedByChinese

関連する問題