Как я могу издеваться над OracleConnection и OracleCommand?

6

Для моих тестов мне нужно издеваться над клиентом данных, в моем случае это Oracle.

Я создал свой уровень доступа к данным, чтобы это можно было передать:

public static Int32? GetUserRoleId(string userName, OracleConnection cn, OracleCommand cmd)

Я использую Moq, хотя я могу переключиться на другую фреймворк, если это необходимо, и когда я иду создавать такие объекты Mock, как это:

Mock<OracleConnection> mockOracleConnection = new Mock<OracleConnection>();
Mock<OracleCommand> mockOracleCommand = new Mock<OracleCommand>();

Я получаю эту ошибку:

Отказ: System.ArgumentException: Тип для издевательства должен быть интерфейсом или абстрактным или незапечатанным классом.

Вывод: Это было проще, чем я думал! Просто высмеивайте функцию слоя DAL следующим образом:

mockDao.Setup(a => a.GetUserRoleId(userName, It.IsAny<OracleConnection>(), It.IsAny<OracleCommand>())).Returns(1);
Теги:
unit-testing
moq

2 ответа

12
Лучший ответ

Вы можете вносить изменения в использование IDbConnection и IDbCommand (использовать интерфейсы и factory для предоставления реальных объектов в основном коде и макет объектов в тесте - обычно с использованием инъекции зависимостей)

Moq может только фальсифицировать интерфейсы и виртуальные методы.

0

Вы пытаетесь высмеять закрытый класс: вы можете посмотреть здесь.

Кстати: как @Aliostad сказал, такая структура - большинство фальсифицированных фреймворков, которые я видел, - может высмеять только интерфейсы/абстрактные классы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню