2010-11-24 3 views
2

Как проверить состояние в проекте архитектуры S # arp?Состояние тестирования в архитектуре S # arp - Лучшая практика

Например, у меня есть собственный RoleProvider. Я хочу проверить метод provider.AddUsersToRoles (строка [], строка []).

Так я начинаю с:

// Arrange 
const string ficticiousRole = "Management"; 
var userToExpect = UserInstanceFactory.CreateValidTransientUser(); 
var roleToExpect = RoleInstanceFactory.CreateValidTransientRole(); 

userRepository.Expect(r => r.GetByUsername(userToExpect.Username)) 
       .Return(userToExpect); 
roleRepository.Expect(r => r.GetByName(ficticiousRole)) 
       .Return(roleToExpect); 

var userNames = new List<string>(); 
var roleNames = new List<string>(); 
userNames.Add(userToExpect.Username); 
roleNames.Add(ficticiousRole); 

Затем добавить пользователя к роли. Затем я проверяю, находится ли пользователь в этой роли.

// Act 
roleProvider.AddUsersToRoles(userNames.ToArray(), roleNames.ToArray()); 
var isNewUserInRole = roleProvider.IsUserInRole(userToExpect.Username, ficticiousRole); 

// Assert 
Assert.IsTrue(isNewUserInRole); 

Проблема в том, что я использую Rhino Mocks. У меня ограниченное знание Rhino Mocks, но из того, что я понимаю (по словам Айенде Рахиена), вы используете Rhino Mocks для тестирования операций, а не состояния.

Итак, я думаю, что более подходящий SqlLite db в памяти будет более подходящим? Каков наилучший способ сделать это в S # arp Arch?

ответ

2

Вы не можете сделать это с Rhino Mocks, поскольку это просто насмешливая структура, которая подделывает такие вещи, как вызовы базы данных и т. Д. Похоже, вы действительно хотите проверить постоянство базы данных, которая в основном является тестированием интеграции базы данных. В этом случае вы определенно захотите использовать базу данных в памяти, такую ​​как SqlLite (если это возможно!), А не ударять экземпляр SQL Server.

Что вы хотите сделать в начале каждого теста или тестового класса, срывает базу данных, если она уже существует, перестраивает базу данных, заполняет базу данных некоторыми исходными данными и затем тестирует взаимодействие с базой данных. Таким образом, вы можете убедиться, что у вас есть известное состояние базы данных до запуска каждого теста.

Одна вещь, которую я сделал в проекте, сгруппировала все мои тесты только для чтения в один тестовый класс, чтобы мне только нужно было выполнить этап восстановления базы данных один раз для класса и перенести все мои тесты на удаление, обновление и вставку другие тестовые классы, которые перестраивали базу данных до каждого теста. Учитывая достаточные тесты, это может быть довольно трудоемким и может быть отклонено на сервер CI.

+0

Вот что я подумал Крис. Благодарю. Я просто подумал, что в S # уже установлена ​​некоторая база данных с памятью. – autonomatt 2010-12-01 10:49:34

0

Не видя остальной части кода, было бы трудно ответить на этот вопрос.

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