Частичное издевательство как запах кода? - PullRequest
8 голосов
/ 27 сентября 2010

Почему так много ненависти происходит о «частичной насмешке» и коде, который требует этого?

Вот (теоретический) пример реализации:

public ComplexResult1 operationA(Stimulus a) {
    {
        ...
        result = ...;
    }
    auditTheChange(a);
}
public ComplexResult2 operationB(Stimulus b) {
    {
        ...
        result = ...;
    }
    auditTheChange(b);
    return result;
}
void auditTheChange(Stimulus stim) {
    // do a bunch of stuff to record the change
    // and interact with another outside service
}

Теперь в моемПонимание этого является хорошо переработанным кодом.

Если я хочу UNIT протестировать операцию A и операцию B, и гарантируют, что аудит происходит в каждом сценарии, , но без необходимости проверятьСпецифика кода аудита, я бы использовал частичное макетирование.

Что я не вижу / не понимаю, что заставляет так много проектов (EasyMock, Mockito и т. д.) рекомендовать рефакторинг?

1 Ответ

4 голосов
/ 28 сентября 2010

Если аудит действительно является внутренней функцией класса, тогда код должен быть протестирован как часть модульного теста.Почему ваш класс обрабатывает как сложные операции, так и аудит?Можно ли перенести одитинг в отдельный класс?

Если это так, представьте одитинг в качестве соавтора с этим классом и смоделируйте его.Если нет, то протестируйте его.

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

...