Издеваетесь над подключением к источнику данных внутри функции с Moq? - PullRequest
2 голосов
/ 28 мая 2009

Я начинаю использовать Moq и не могу понять, как проверить метод Выполнить в приведенном ниже коде:

У меня есть следующий класс:

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); 
    }

}

Другой метод отвечает за создание и инициализацию IDataReaderPlugin и IDataWriterPlugin из информации в файле конфигурации.

Я хочу проверить метод Execute. Итак, мне нужно смоделировать m_source и m_dest , и после того, как я хочу проверить результат, отправленный на m_dest .

Как мне этого добиться с помощью Moq?

Спасибо.

Ответы [ 3 ]

4 голосов
/ 28 мая 2009
[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 */);

}
2 голосов
/ 28 мая 2009

Это должно помочь вам начать:

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));
2 голосов
/ 28 мая 2009

«Ответственный другой метод» - это ключевой бит информации. Если вы используете 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...