Тестирование внутреннего класса
Как написать модульные тесты для внутренних классов???
6 ответов
Вы пишете тесты, которые определяют поведение внешнего интерфейса класса верхнего уровня. Использует ли этот класс внутренние классы для реализации этого поведения или нет, это деталь реализации класса, и тестам не нужно ничего знать об этом.
Если внутренний класс не может быть адекватно протестирован через интерфейс класса верхнего уровня, то обычно лучше удалить внутренний класс и проверить его непосредственно как новый класс верхнего уровня. Желание протестировать внутренние классы - это запах кода, который может быть достаточно важным для того, чтобы быть классом верхнего уровня.
Не то, чтобы я рекомендовал это, но вы также можете использовать InternalsVisibleToAttribute.
При использовании MS Visual Studio для модульных тестов вам нужно просто создать частный Accessor. Внутренне это работает с отражениями, я думаю. Просто взгляните на сгенерированный код.
Вы не проверяете это напрямую. Это будет проверено через класс, где это определено.
И, если вы применяете TDD, как в настоящее время подразумевают теги этого вопроса, какой тест вы только что написали, который вызывает внутренний класс? Я имею в виду, не может ли это быть стандартный класс, находящийся в частной собственности класса, над которым вы работаете?
Мы использовали вспомогательный класс, который использует отражение для загрузки и вызова методов во внутренних классах. Также возможно изменить доступность во время компиляции, используя символ DEBUG, например
#if DEBUG
public
#else
internal
#endif
class MyInternalClass
{
...
}
Однако ответ Эско Луонтолы является более правильным, поскольку наиболее важны функциональные или бизнес-требования. Легко слишком сосредоточиться на покрытии кода, а не тестировать важные области риска.
Смотрите подробные объяснения от http://msdn.microsoft.com/en-us/library/bb385974.aspx