Я делаю модульный тест для достижения максимального выполнимого покрытия. Если я не могу достигнуть некоторого кода, я осуществляю рефакторинг, пока покрытие не максимально полно
, После того, как закончено к ослеплению теста записи, я обычно пишу один тестовый сценарий, воспроизводящий каждую ошибку
, я используюсь для разделения между тестированием кода и интеграционным тестированием. Во время интеграционного тестирования, (которые являются также модульным тестом, но на группах компонентов, таким образом, не точно, что для модульного теста для) я протестирую на требования, которые будут реализованы правильно.
Вы можете создавать внутренние классы. И предоставьте указанным сборкам доступ к этим классам с помощью атрибута InternalsVisibleTo .
Сборка должна иметь строгое имя. Дополнительную информацию об атрибуте можно найти в этой статье .
Проблема с внутренними классами в том, что Internal не имеет смысла в IL, и классы можно вызывать через отражение. Таким образом, использование InternalsVisibleTo - это больше помощник для компилятора, чем что-либо еще.
Вы можете сделать еще один шаг, используя StrongNameIdentityPermission , который будет проверять открытый ключ сборки со строгим именем, вызываемой в код - если открытый ключ не совпадает, возникает исключение безопасности. Это принудительно, даже когда код вызывается через отражение.