Состояние тестирования в S#arp Architecture - лучшие практики
Как проверить состояние в проекте S#arp Architecture?
Например, у меня есть собственный RoleProvider. Я хочу проверить метод provider.AddUsersToRoles(string[], string[]).
Итак, я начну с:
// 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, но, насколько я понимаю (согласно Ayende Rahien), вы используете Rhino Mocks для проверки работоспособности, а не состояния.
Итак, я думаю, что SqlLite DB в памяти будет более подходящим? Какой лучший способ сделать это в S#arp Arch?
2 ответа
Вы не можете сделать это с помощью Rhino Mocks, поскольку это просто фальшивый фреймворк, который подделывает такие вещи, как вызовы базы данных и т. Д. Похоже, вы действительно хотите проверить постоянство базы данных, что в основном является тестированием интеграции базы данных. В этом случае вы, безусловно, захотите использовать базу данных в памяти, такую как SqlLite (если возможно!), А не попадать в экземпляр SQL Server.
Что вы хотите сделать, так это в начале каждого теста или тестового класса разбить базу данных, если она уже существует, перестроить базу данных, заполнить базу данных некоторыми начальными данными, а затем протестировать взаимодействие с базой данных. Таким образом, вы можете убедиться, что у вас есть известное состояние базы данных перед каждым тестом.
Одна вещь, которую я сделал в проекте, сгруппировала все мои тесты, доступные только для чтения, в один тестовый класс, так что мне пришлось сделать шаг перестройки базы данных только один раз для класса и переместить все мои тесты удаления, обновления и вставки в другие тестовые классы, которые перестроить базу данных перед каждым тестом. При наличии достаточного количества тестов это может занять довольно много времени и может потребоваться перенести на сервер CI.
Не видя остальную часть вашего кода, было бы трудно ответить на это.