Почему использование платформа насмешки вместо прокрутки руки наши насмешки?

В настоящее время я читаю книгу (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 поддельных объектов генерировать.

Что я пропускаю?

8
задан R. Martinho Fernandes 18 December 2009 в 20:57
поделиться

5 ответов

Некоторые преимущества макетов фреймворков по сравнению с макетами, созданными вручную:

  • Имитационное поведение ближе к тестовому коду, потому что это в тестовом коде. Это упрощает понимание тестов без необходимости смотреть на другой код.
  • Вам не нужно создавать еще один фиктивный класс (или того хуже: добавлять логику к существующему) только потому, что вам нужно немного другое поведение.
  • Вы в конечном итоге пишете меньше шаблонов, потому что вам нужно только настроить методы, которые вы хотите имитировать, в то время как с ручными методами вам нужно реализовать весь интерфейс.

Некоторые недостатки:

  • Вы должны изучить структуру, в то время как каждый может писать макеты вручную.
  • Это еще одна зависимость, которую вы добавляете в свой проект.

(Это то, о чем я могу думать прямо сейчас. Не стесняйтесь редактировать и добавлять больше.)

14
ответ дан 5 December 2019 в 11:25
поделиться

Мы используем его, по сути, для создания поддельного сервера в среде клиент / сервер.

Таким образом, вызовы не должны проходить весь путь от клиента к серверу, к базе данных и обратно. Они просто переходят на фиктивный сервер, которому сказано вернуть определенный объект / значение для данного вызова и ожидать, что определенные вызовы будут сделаны.

-1
ответ дан 5 December 2019 в 11:25
поделиться

Фреймворк фиксации избавляет вас от бремени создания уникальных фиктивных объектов, которые возвращают данные, специфичные для вашего тестового примера. Они также позволяют проверять, были ли доступны или изменены определенные методы или свойства (потребителями фиктивного объекта). Это позволяет вам легче тестировать и, следовательно, обеспечивать соблюдение определенного ожидаемого поведения.

Мок-фреймворки - это просто инструменты. Конечно, вы можете сделать это вручную, но вы можете тратить время на поддержку классов, предназначенных только для тестирования.

Аналогичный вопрос доступен здесь .

2
ответ дан 5 December 2019 в 11:25
поделиться

Mocking позволяет вам контролировать входящие данные, чтобы убедиться, что выходные данные происходят правильно. Например, вы можете передать данные, которые, как вы знаете, будут ошибочными, а затем проверить, действительно ли ваши методы вызывают эту ошибку, и вы можете передать действительные данные и проверить, что действительные данные действительно возвращаются из объекта.

Есть еще фреймворки, чем просто Moq;

-1
ответ дан 5 December 2019 в 11:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: