2013-10-02 3 views
0

Используя Microsoft Fakes Framework, я работаю над модульным тестом, который проверяет метод вставки записи. У меня есть три класса: TransportControllerTest, TransportManager и DbController. Класс TransportControllerTest является классом Unit Test. TransportManager является частью бизнес-логического уровня, а DbController имеет три метода (вставка, получение и удаление). Эти последние методы получают доступ к моей базе данных, используя ADO.NET.ADO.NET специфический тестовый набор данных id mocking

В моем модульном тесте Я хочу протестировать метод вставки TransportController. Этот контроллер дважды вызывает dbController: dbController.insert() и dbController.get(). Последний вызов дает последний сгенерированный ключ, передавая параметры, используемые для вставки при первом вызове. Таким образом, в TransportController, я могу получить доступ сгенерированный идентификатор по телефону:

string val = dt.Rows[0]["id"].ToString(); 
    int id = Int32.Parse(val); 

Я хочу издеваться значение выше, так что это выражение верно:

dt.Rows[0]["id"].ToString().Equals("*mocked id*"); 

Я попытался следующие:

DataTable dt = new DataTable(dataSetName); 
    dt.Columns.Add("id"); 
    DataRow dr = dt.NewRow(); 
    dr.ItemArray.SetValue(1, 0); 
    dt.Rows.Add(dr); 

    return dt; 

Но это не работает. Как я могу сделать данное выражение истинным в своем тесте?

ответ

1

Только что проверили, что вы можете подделать здесь.

var row = new ShimDataRow().Instance; 

ShimDataRowCollection 
    .AllInstances 
    .ItemGetInt32 = (collection, i) => row; 

ShimDataRow 
    .AllInstances 
    .ItemGetString = (dataRow, s) => "*mocked id*"; 

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

Таким образом, вы полностью избегаете использования типов System.Data и продолжите свою логику.

+0

спасибо, это сработало для меня – dpwulp94

 Смежные вопросы

  • Нет связанных вопросов^_^