Можете ли вы объяснить разницу между 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
Он говорит:
строгие насмешки потерпят неудачу, если произойдет что-то, чего не ожидается к ним. В долгосрочной перспективе это означает, что любое изменение кода под тест может сломать ваши тесты, даже если изменение не имеет ничего общего с что вы на самом деле тестируете в этом конкретном тесте.
Я рекомендую использовать заглушки и динамические насмешки вместо этого.