Можете ли вы объяснить разницу между StrictMock и Partialmock?

поскольку я использую RhinoMocks версии 3.6 и поскольку я не использую Record-Replay и поскольку я не вызываю методы проверки для утверждения на mocks;

можете ли вы объяснить, в чем разница между очень просто?

MockRepository.GenerateMock()
MockRepository.GeneratePartialMock()
MockRepository.GenerateStrictMock()

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

2 ответов


различия пояснил в этой статье

если вы не создаете никаких ожиданий на StrictMock, и метод вызывается на макете, будет выдано исключение.

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

существует также нечто, называемое DynamicMock. Если вы не создаете никаких ожиданий на DynamicMock, и метод вызывается на макете, вызывается метод заглушки. Если есть возвращаемое значение, значение по умолчанию (например,null или 0) возвращается.

GenerateMock Я считаю, создает DynamicMock.

Ayende выбрал это значение по умолчанию, потому что он рекомендует идеал использования только DynamicMock и Stub. StrictMock создает хрупкие тесты и обычно нарушает концепцию проверки только одного поведения на тест.

посмотреть эта статья: http://ayende.com/wiki/Rhino%20Mocks%203.5.ashx#CreateMockisdeprecated,replacedbyStrictMockTheuseofStrictmockisdiscouraged

Я также видел, как он сказал, что полезно начать со строгих насмешек и работать с вашими тестами до динамических насмешек/заглушек, как только вы освоитесь с тем, как ведет себя ваш тестируемый код. Нет ссылки для этого tho:)


Я должен добавить, что" использование строгой насмешки не поощряется " словами Ayende. http://ayende.com/wiki/Rhino+Mocks+3.5.ashx#CreateMockisdeprecated,replacedbyStrictMockTheuseofStrictmockisdiscouraged

Он говорит:

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

Я рекомендую использовать заглушки и динамические насмешки вместо этого.