Состояние тестирования в архитектуре S # arp - передовой опыт

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

Например, у меня есть собственный RoleProvider. Я хочу протестировать метод Providerr.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, но насколько я понимаю (по словам Айенде Рахиен), вы используете Rhino Mocks для проверки операций, а не для проверки состояния.

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


person autonomatt    schedule 24.11.2010    source источник


Ответы (2)


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

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

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

person Chris Conway    schedule 30.11.2010
comment
Я так думал, Крис. Спасибо. Я просто подумал, что для этого уже настроена какая-то база данных в памяти в S #. - person autonomatt; 01.12.2010
comment
Я только что нашел вики-запись, в которой описывается, как тестировать операции с базой данных с помощью Sharp. По сути, вы делаете свой тестовый класс унаследованным от RepositoryTestBase. Подробнее см. Здесь - person autonomatt; 14.12.2010

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

person Alec    schedule 30.11.2010