Мне нужно проверить класс, возвращающее значение, зависит от значений из базы данных. Я мог бы просто нажать базу данных в модульном тесте, но эти значения могут измениться. Есть ли стандартное решение?Использование MBUnit для проверки значений по базе данных
3
A
ответ
4
Стандартный ответ - переделать класс, чтобы вы могли издеваться над зависимостью. Обычно это делается путем ввода вашего источника данных в качестве интерфейса в ваш класс.
например. Вы можете иметь класс, который действует, как показано ниже
class John
{
public John() { }
public void Load()
{
// call to db in here e.g SQLCommand
}
}
Нагрузка зависит от SQLCommand, так что вы всегда должны вызывать дб для этого
Если впрыснуть интерфейс источника данных вы больше гибкости
например
class John
{ IDataSource _db;
public John(IDataSource db)
{
_db = db;
}
public void Load()
{
_db.Load("John"); // IDataSource can now be either SQL
//or hardcoded or what ever much easier to test
}
}
Теперь, если вы не можете/не будет делать, что вы должны относиться к этому испытанию как интеграционный тест. Как насчет того, как вы настроили данные для этого. например вставьте строку, которую вы хотите прочитать. Затем верните данные в исходное состояние. Нижняя сторона этого заключается в том, что ваш тест будет медленным и хрупким.