2

Moq を使い始めましたが、以下のコードでメソッドExecuteをテストする方法がわかりません。

私は次のクラスを持っています:

public class MyObject {
    private IDataReaderPlugin m_source;
    private IDataWriterPlugin m_dest;
    private string[] m_dummyTags = new string[] { "tag1", "tag2", "tag3"};

    public void Execute(DateTime time)
    {
        DataCollection tags = m_source.SnapshotUtc(m_dummyTags, time);

        //Doing some treatment on the values in tags    

        m_dest.Write(tags); 
    }

}

もう 1 つのメソッドは、構成ファイル内の情報から IDataReaderPlugin と IDataWriterPlugin を作成して初期化します。

メソッドExecuteをテストしたい。したがって、m_sourcem_destをモックする必要があり、 m_destに送信された結果をテストした後です。

Moqでこれを達成するにはどうすればよいですか?

ありがとう。

4

3 に答える 3

4
[Test]
public void ShouldWriteToMDest()
{
   // Arrange
   var mockDest = new Mock<IDataWriterPlugin>();
   var mockSource = new Mock<IDataReaderPlugin>();
   string[] m_dummyTags = new string[] { "tag1", "tag2", "tag3"};

   mockSource.Setup(source => source.SnapshotUtc(m_dummyTags, It.IsAny<DateTime>()).Returns(/*whatever you need*/);

   var myObj = new MyObject(mockSource.Object, mockDest.Object);

   // Act
   myObj.Execute(DateTime.Now);


   // Assert
   Assert.That(mockSource.Object.WhateverPropertyContainsOutput == /*Whatever you need */);

}
于 2009-05-28T17:23:04.987 に答える
2

「別の方法が責任を負います」 - これは重要な情報です。IoC または DI フレームワークを使用している場合は、インターフェースの Moq モックをいくつか挿入する必要がありIDataReaderPluginますIDataWriterPlugin。次に、Executeメソッドは、IoC/DI フレームワークによって提供されるこれらのモックを使用します。

セッターまたはプロパティによって単純に設定される場合は、次のように簡単です。

// Arrange
var mo = new MyObject();
var srcMock = new Mock<IDataReaderPlugin>();
src.Setup(src => src.SnapshotUtc(It.IsAny<string[]>(), It.IsAny<DateTime>()))
   .Returns(new DataCollection() /* or whatever */);
mo.SetSource(srcMock.Object);
// ... same for m_dest
// Act
mo.Execute(DateTime.Now);
// Assert
// assert something... srcMock.Verify() or whatever
于 2009-05-28T17:21:09.233 に答える
2

これで始められるはずです:

DateTime myDate = DateTime.Now;

DataCollection tags = new DataCollection();

Mock<IDataReaderPlugin> dataReaderPlugin = new Mock<IDataWriterPlugin>();
dataReaderPlugin.Setup(drp => drp.SnapshotUtc(It.IsAny<string[]>(), myDate)).Returns(tags);

Mock<IDataWriterPlugin> dataWriterPlugin = new Mock<IDataWriterPlugin>();
dataWriterPlugin.Setup(dwp => dwp.Write(tags);    

MyObject mo = new MyObject();
mo.Execute();

mock.Verify(foo => foo.Write(tags));
于 2009-05-28T17:23:04.113 に答える