Состояние тестирования в S # arp Architecture - лучшие практики - PullRequest
2 голосов
/ 24 ноября 2010

Как проверить состояние в проекте 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 в памяти была бы более подходящей?Какой лучший способ сделать это в S # arp Arch?

Ответы [ 2 ]

2 голосов
/ 30 ноября 2010

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

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

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

0 голосов
/ 30 ноября 2010

Не видя остальную часть вашего кода, было бы сложно ответить на это.

...