Поймите, это может звучать как широкий вопрос, поэтому позвольте мне уточнить. У меня есть репозиторий, представленный через интерфейс, с двумя конкретными реализациями - MockRepository и EntityFrameworkRepository .
Теперь у меня есть проект Unit-Test, для которого все тесты могут быть запущены для либо репозитория, путем пролистывания строки в [TestInitialize]
.
Мой вопрос в основном "Как мне писать тесты".
Вот что у меня есть:
C reate
// Arrange.
var foo = new Foo { .. };
// Act
Repository.Add(foo);
UnitOfWork.Commit();
// Assert
Assert.IsTrue(foo.Id > 0);
R etrieve
// Arrange.
var fooToGet = 1;
// Act
var foo = Repository.FindSingle(fooToGet);
// Assert
Assert.IsNotNull(foo);
Assert.AreEqual(foo.Id, fooToGet);
U pdate
// Arrange.
var fooToGet = 1;
var nameToChangeFooTo = "FooBar";
// Act
var foo = Repository.FindSingle(fooToGet);
foo.Name = nameToChangeFooTo;
UnitOfWork.Commit();
var fooRetrievedAgain = Repository.FindSingle(fooToGet);
// Assert
Assert.IsNotNull(foo);
Assert.AreEqual(fooRetrievedAgain.Id, fooToGet);
Assert.AreEqual(fooRetrievedAgain.Name, nameToChangeFooTo);
D elete
// Arrange.
var fooToGet = 1;
// Act
var foo = Repository.FindSingle(fooToGet);
Repository.Remove(foo);
UnitOfWork.Commit();
var fooRetrievedAgain = Repository.FindSingle(fooToGet);
// Assert
Assert.IsNull(fooRetrievedAgain);
Работает ок , для репозитория Mock и EF, но моя главная проблема - C (Create). Я не уверен, как проверить операцию добавления в моем репозитории. Это не не чувствуется правильным что я делаю.
Он подходит для репозитория EF, но чтобы пропустить его в моем репозитории Mock, мне пришлось использовать отражение для обновления идентификатора в коллекции в памяти (неприятно).
Итак - не могли бы вы поделиться некоторыми советами о том, как правильно тестировать операции CRUD в шаблоне репозитория?
Это приложение ASP.NET MVC, .NET 4, C #, Entity Framework 4 и шаблоны единиц работы / репозитория.
Спасибо.
EDIT
Просто, чтобы уточнить, ребята, это не все юнит-тесты, которые у меня есть. У меня есть модульные тесты для моего уровня обслуживания, а также тесты бизнес-правил.
Оба последних будут (и должны) потерпеть неудачу, если мои вышеупомянутые тесты репозитория не пройдут. В этом и заключается смысл, чтобы провести модульное тестирование самых основных операций моих репозиториев. Я не прав?