На ум приходит пара стратегий.
- Создайте класс-оболочку для существующего класса доступа к БД.Дайте этой оболочке дождаться переадресации любых вызовов в базовую реализацию, пока вы не вызовете
Commit
.
Я не рекомендую это.Это была бы бессмысленная абстракция, зарезервированная только для тестирования, потому что реальный класс БД (вероятно) делает то же самое под прикрытием.Он будет ждать вызова БД, пока не будет вызван Commit
.
- Не пытайтесь проверять доступ к данным таким способом.Вместо этого подтверждает, что
Commit
не называется .
То, что вы пытаетесь сделать, это проверка с учетом состояния - выпроверяется состояние этих вызовов на основе того, как Commit
и Rollback
влияют на них.Это неправильный способ использования mocks.
Если вы подтвердите, что Commit
не был вызван, вы тестируете высокоуровневое поведение кода, который откатывает транзакцию, иего взаимодействие с классом БД.Вы проверяете, что откат вызван, и что коммит не вызван, и верите, что он будет правильно обрабатывать детали.
Что-то вроде:
_mockRepository.Verify(x => x.Commit(), Times.Never());
_mockRepository.Verify(x => x.Rollback(), Times.Once());
Если вам нужно проверить БДСам класс, вы можете смоделировать его соединение с БД и убедиться, что вызовы не выполняются, если вызывается Rollback
.Но вам не следует проводить такого рода тестирование, если только вы не тестируете модулем этот класс БД напрямую.