Moq, как Вы тестируете внутренние методы?

Мы также видели некоторые проблемы с VS встроенный сервер относительно некоторых сторонних средств управления, которые помещают их сценарии в \aspnet_client папку. Так как папка не там, когда Вы не работаете под IIS, средства управления не работали. Кажется намного более простым всегда работать с IIS и избежать странных проблем.

8
задан Christoffer Hammarström 27 April 2010 в 14:01
поделиться

5 ответов

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

http://geekswithblogs.net/MattRobertsBlog/archive/2008/12/16 /how-to-make-a-quotprotectedquot-method-available-for-quotpartialquot-mocking-and-again.aspx

11
ответ дан 5 December 2019 в 07:12
поделиться

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

Как сказано в другом ответе, вы можете использовать Атрибут InternalsVisibleTo для этого. Но это не значит, что вы должны это делать.

3
ответ дан 5 December 2019 в 07:12
поделиться

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

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

Частные методы существуют не просто так. Если они не приводят к внешнему тестируемому поведению, они вам не нужны.

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

Основным преимуществом TDD является то, что ваш код становится легко изменять. Если вы начнете тестировать внутренние компоненты, то код станет жестким и его трудно будет изменить.

1
ответ дан 5 December 2019 в 07:12
поделиться

Нет ничего плохого в том, чтобы сделать внутреннюю часть видимой для тестирования другими классами. Если вам нужно проверить внутреннюю часть класса, обязательно сделайте это. То, что методы не являются общедоступными, не означает, что вы должны их игнорировать и тестировать только общедоступные методы. Хорошо спроектированное приложение на самом деле будет иметь большую часть кода, инкапсулированного внутри ваших классов таким образом, что они не являются публичными. Поэтому игнорирование непубличных методов при тестировании является большой ошибкой IMHO. Одной из прелестей юнит-тестирования является то, что вы тестируете все части вашего кода, независимо от того, насколько они маленькие, и когда все ваши тесты работают на 100%, это очень разумное предположение, что когда все эти части будут собраны вместе, ваше приложение будет корректно работать для конечного пользователя. Конечно, проверка того, что последняя часть - это то, на что приходят тесты уровня интеграции - это совсем другое дело. Так что тестируйте прочь!!!

.
5
ответ дан 5 December 2019 в 07:12
поделиться

InternalsVisibleTo - ваш друг для тестирования внутренних компонентов. Не забудьте подписать свои сборки, и вы в безопасности.

1
ответ дан 5 December 2019 в 07:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: