Тестировать закрытые методы и внутренние классы с помощью NUnit? - PullRequest
12 голосов
/ 10 июня 2009

Как мне протестировать закрытые методы и внутренние классы, используя NUnit?

Ответы [ 5 ]

33 голосов
/ 10 июня 2009

Частные методы:

Если вы пытаетесь протестировать закрытые методы, это обычно означает, что вы делаете это неправильно.

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

Внутренние классы:

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

Для этого случая взгляните на InternalsVisibleToAttribute .

5 голосов
/ 10 июня 2009

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

2 голосов
/ 18 декабря 2012

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

При использовании IoC у вас есть интерфейс для каждого класса, в котором есть некоторая логика. Таким образом, в основном вы кодируете против интерфейса, а не фактической реализации. Это позволяет нам пометить все методы как открытые, и это не влияет на то, как используется класс, за исключением того, что оно позволяет писать модульные тесты для каждого метода в этом классе.

0 голосов
/ 09 августа 2018

Просто используйте решение, показанное здесь: C # «внутренний» модификатор доступа при выполнении юнит-тестирования

и вы увидите, что внутренние органы могут и должны быть проверены.

0 голосов
/ 10 июня 2009

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

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