2017-02-08 10 views
-2

Несмотря на то, что я понял принцип издевок, окурков и абстракции классов для проверяемого дизайна, есть что-то, что до сих пор остается неясным для меня.Как правильно абстрагировать объекты системы при модульном тестировании на C#?

Работая с .NET, существует много встроенных классов, таких как StackTrace, например, в пространстве имен Diagnostics.
Некоторые из этих классов содержат коллекции других классов, и эти классы также содержат другие классы и т. Д. И т. Д. И т. Д. ... - принцип сдерживания.
Например: Класс StackTrace содержит массив объектов StackFrame, который сам имеет метод, возвращающий объект MethodBase.

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

Надеюсь, я достаточно ясен на этом.

+5

Почему вы хотите, чтобы дразнить 'StackTrace'? Обычно вы mock * services * - не объекты данных, такие как 'StackTrace' и' MethodBase'. (Аналогично, вы не утруждаете насмешливыми коллекциями, строками и т. Д.) –

+0

@JonSkeet Класс 'StackTrace' обладает способностью читать файлы внутри (что является вводом-выводом, поэтому это своего рода сервис), поэтому он имеет для издевательства, чтобы избежать зависимости файловой системы. Пожалуйста, поправьте меня, если я ошибаюсь. –

+0

Только если вы используете этот аспект. –

ответ

0

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

Примечание: Это отвечает только конкретный пример, приведенный в вопросе