Использование MBUnit для проверки значений в базе данных - PullRequest
3 голосов
/ 27 октября 2009

Мне нужно проверить класс, чье возвращаемое значение зависит от значений из базы данных. Я мог просто поразить базу данных в модульном тесте, но эти значения могли измениться. Есть ли стандартное решение для этого?

1 Ответ

4 голосов
/ 27 октября 2009

Стандартный ответ - изменить класс, чтобы вы могли смоделировать зависимость. Обычно это делается путем внедрения вашего источника данных в качестве интерфейса в ваш класс.

например. У вас может быть класс, который действует как ниже

class John 
{
     public John() { }
     public void Load()
     {
          // call to db in here e.g SQLCommand
     }                  
}

Загрузка зависит от SQLCommand, поэтому вам всегда нужно будет вызывать дБ для этого

Если вы внедрите интерфейс источника данных, у вас будет больше гибкости

1010 *, например *

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
     }                  
}
<ч />

Теперь, если вы не можете / не будете этого делать, вы должны рассматривать этот тест как интеграционный тест. Как насчет того, чтобы настроить данные для него. например вставьте строку, которую вы хотите прочитать. Затем верните данные в исходное состояние. Обратной стороной этого является то, что ваш тест будет медленным и хрупким.

...