RhinoMock: Mocks против StrictMocks против DynamicMocks - PullRequest
22 голосов
/ 20 августа 2010

Я понимаю разницу между Mock и Stub.

Но разные типы Mocks в среде RhinoMock меня смущают.

Может кто-нибудь объяснить понятия Mocks против StrictMocks против DynamicMocks в терминахфреймворка RhinoMock.

Ваши ответы очень ценятся.

Ответы [ 2 ]

30 голосов
/ 20 августа 2010

Строгий макет - это макет, который вызовет исключение, если вы попытаетесь использовать любой метод, который явно не был настроен для использования.

Динамический (или свободный) макет не вызовет исключениеЕсли вы попытаетесь использовать метод, который не настроен, он просто вернет null значение по умолчанию из метода и продолжит работу.

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

0 голосов
/ 30 октября 2012

Сильно не согласен по этому вопросу.

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

Представьте, что вы добавили цикл foreach, где вы сделали вызов db внутри цикла. Это очень плохо масштабируется. Если бы вы использовали динамические mock для моделирования ваших зависимостей, вы потенциально могли бы пропустить mock-вызовы db, следовательно, пропустили бы проблему масштабируемости, потому что вам не нужно было бы строго mock каждый вызов db.

public void myMethod()
{
    externalMethod1.doSomething();
    foreach() 
    {
        externalDbCall.doSql();
    }
}

public void testMyMethodWithDynamicMocksPassesAndMissesDbCallInLoop()
{
    expect(externalMethod1.doSomething();
}

public void testMyMethodWithStrictMocksFailsAndHighlightsDbCallInLoop()
{
    expect(externalMethod1.doSomething();
}
...