Наборы насмешливых данных с Moq - PullRequest
7 голосов
/ 23 февраля 2009

Я пытаюсь начать работу с Moq, и у меня возникают проблемы с поиском хороших ресурсов, чтобы делать то, что мне нужно.

У меня есть класс интерфейса данных, который имеет метод Get, который возвращает набор данных через хранимую процедуру. Так был написан код, и я не могу изменить его в данный момент, поэтому это нужно сделать таким образом.

Я хочу протестировать этот класс с помощью Mocking the Dataset и возврата данных, поэтому мне не нужно фактически выполнять вызов базы данных.

Кто-нибудь делает это, и если да, то где хорошее место, чтобы начать делать это?

Ответы [ 2 ]

7 голосов
/ 24 февраля 2009

Вам не нужно подключение к базе данных, чтобы заполнить DataSet. Вы можете издеваться над этим так:

IDataInterface di = new Mock<IDataInterface>();
DataSet mockDataSet = CreateMockDataSet();
di.Expect(x => x.Get()).Returns(mockDataSet);
something.UseDataInterface(di.Object);

Заполнение фиктивного DataSet довольно болезненно. Если я делаю это, я обычно помещаю фасадный интерфейс перед возвращенным DataSet, который легче подделать. Или я изменяю код, чтобы использовать DataTable, который легче заполнить.

В качестве альтернативы, используйте встроенные базы данных, такие как SQLite или SQL Server CE, для своих модульных тестов.

0 голосов
/ 23 апреля 2018

Я тоже столкнулся с вышеуказанной проблемой и придумал это решение. Я делюсь этим, потому что я не смог найти что-либо в Google для этого:

[TestCategory("GetDataSet")]
[TestMethod]
public void GetDataSet_ValidCall_ShouldPass()
{
    // Arrange

    var dataSet = Builder<DataSet>.CreateNew().Build();

    DataTable table1 = new DataTable();
    table1.Columns.Add("Id", typeof(int));
    table1.Columns.Add("Name", typeof(string));
    table1.Rows.Add("1", "Name1");

    DataTable table2 = new DataTable();
    table2.Columns.Add("More", typeof(bool));
    table2.Rows.Add(false);    

    dataSet.Tables.Add(table1);
    dataSet.Tables.Add(table2);

    objectWhichHaveProcMethod.Setup(elem => elem.ExecuteProcAndGetDataSet("YourSprocName", It.IsAny<SqlParameter>(), It.IsAny<SqlParameter>())).Returns(dataSet);

    // Act
    var response = dataInterfaceClass.Get();

    // Assert  
    Assert.AreNotEqual(response, null);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...