Подтвердить что ты не робот

RhinoMock: Mocks Vs StrictMocks Vs DynamicMocks

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

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

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

ваши ответы с благодарностью.

4b9b3361

Ответ 1

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

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

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

Ответ 2

Сильно не согласен с этим.

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

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

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

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

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