В настоящее время я читаю книгу (Pro Платформа ASP.Net).
В этой книге автор предлагает использовать платформу Moq, чтобы помочь сделать TDD.
[Test]
public void List_Presents_Correct_Page_Of_Products()
{
IProductsRepository repository = MockProductsRepository(
new Product { Name = "P1" }, new Product { Name = "P2" },
new Product { Name = "P3" }, new Product { Name = "P4" },
new Product { Name = "P5" }
);
ProductsController controller = new ProductsController(repository);
...
}
static IProductsRepository MockProductsRepository(params Product[] prods)
{
// Generate an implementor of IProductsRepository at runtime using Moq
var mockProductsRepos = new Moq.Mock();
mockProductsRepos.Setup(x => x.Products).Returns(prods.AsQueryable());
return mockProductsRepos.Object;
}
В образцовом слое мы имеем, определяют FakeRepository и SqlRepository.
Факт, я не вижу преимущества использования этой moq платформы. Почему мы не только используем наш FakeRepository? Или очистите наш FakeRepository и добавьте поддельный продукт на нем?
Сначала, я думал, что moq платформа была там для генерации поддельных данных, таким образом, Вы не имеете к тому, если у Вас есть, например, 100 поддельных объектов генерировать.
Что я пропускаю?
Некоторые преимущества макетов фреймворков по сравнению с макетами, созданными вручную:
Некоторые недостатки:
(Это то, о чем я могу думать прямо сейчас. Не стесняйтесь редактировать и добавлять больше.)
Мы используем его, по сути, для создания поддельного сервера в среде клиент / сервер.
Таким образом, вызовы не должны проходить весь путь от клиента к серверу, к базе данных и обратно. Они просто переходят на фиктивный сервер, которому сказано вернуть определенный объект / значение для данного вызова и ожидать, что определенные вызовы будут сделаны.
Вы можете прочитать это Ручное издевательство: противодействие вторжению точек и скобок
Фреймворк фиксации избавляет вас от бремени создания уникальных фиктивных объектов, которые возвращают данные, специфичные для вашего тестового примера. Они также позволяют проверять, были ли доступны или изменены определенные методы или свойства (потребителями фиктивного объекта). Это позволяет вам легче тестировать и, следовательно, обеспечивать соблюдение определенного ожидаемого поведения.
Мок-фреймворки - это просто инструменты. Конечно, вы можете сделать это вручную, но вы можете тратить время на поддержку классов, предназначенных только для тестирования.
Аналогичный вопрос доступен здесь .
Mocking позволяет вам контролировать входящие данные, чтобы убедиться, что выходные данные происходят правильно. Например, вы можете передать данные, которые, как вы знаете, будут ошибочными, а затем проверить, действительно ли ваши методы вызывают эту ошибку, и вы можете передать действительные данные и проверить, что действительные данные действительно возвращаются из объекта.
Есть еще фреймворки, чем просто Moq;