Тесты написаны, чтобы доказать, что функциональные и бизнес-требования выполнены. Поэтому я использую общедоступные интерфейсы используемых классов. Публичные интерфейсы детализируются до внутренних и частных классов. Если исключение выдается на более низком уровне или если функция возвращает неправильные данные, я фиксирую их в тесте на соответствие бизнес-правилу.
Например, если Employee является бизнес-классом и вызывает EmployeeSerializer.GetAll (), мне нужно только проверить Employee.GetAll. Если EmployeeSerializer () не возвращает правильные данные, я буду знать это. Если EmployeeSerializer выдает неожиданное исключение, я буду знать это. Если EmployeeSerializer не выдает правильные исключения, я буду знать это.
Не кодируйте свои тесты для проверки деталей реализации. Кодируйте их, чтобы проверить бизнес-правила. Это означает, что вы тестируете бизнес-объекты. Чтобы облегчить эту работу, я помечаю свои объекты доступа к данным как ВНУТРЕННИЕ, поэтому не могу проверить их вне бизнес-контекста, в котором они предназначены для использования.
Но это я, и я уверен, что у других разные мнения.
ADDENDUM: Храните бизнес-правила как можно дальше от хранимых процедур. Также настройте известные тесты, используя [Setup] и [TearDown]. Помните, что тест проверяет целое бизнес-правило. Вы можете выполнять как можно больше работы по настройке теста, если тест выполняется изолированно, и вы можете восстановить его исходное состояние после завершения теста. Поэтому, если вы хотите вставить данные, убедитесь, что у вас есть метод бизнес-класса, который это делает. То же самое для обновления, удаления и выбора.