Как мы можем высмеивать статические, доступные только для чтения члены и функции, которые находятся в одном классе? - PullRequest
1 голос
/ 21 августа 2009

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

  1. когда тестируемый метод оборачивает статический метод.

  2. когда тестируемый метод переносит свойство только для чтения.

  3. когда тестируемый метод вызывает другой метод, принадлежащий к тому же классу.

как мне создать для них макеты. Как мне разрешить эти сценарии, могу ли я пойти вперед, изменив реализацию проверенного метода .?

любые предложения будут полезны.

спасибо.

Ответы [ 4 ]

2 голосов
/ 21 августа 2009

Есть два способа обойти это. 1) ввести необходимые уровни абстракции, которые позволят вам макетировать / заглушки по мере необходимости, или 2) использовать TypeMock Isolator, который позволит вам высмеивать почти все через какую-то умную (слишком умную, как говорят, некоторые) реинжиниринг IL.

0 голосов
/ 22 августа 2009

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

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

Было бы полезно, если бы вы опубликовали несколько примеров кода, демонстрирующих, что вы пытаетесь сделать.

0 голосов
/ 22 августа 2009

Поскольку прокси-объект наследуется от цели. я не думаю, что можно смоделировать целевой объект, используя moQ, может быть, мы должны попробовать Type Mock Isolator в этих сложных сценариях

0 голосов
/ 21 августа 2009

Я не знаю о MOQ, но в RhinoMocks вы можете создать что-то, называемое PartialMock, которое позволяет вам смоделировать части объекта, но оставить другой в покое, все с ожиданием будет высмеяно.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...