Попробуйте что-то вроде этого:
[Test]
public void TestFindById() {
const int TEST_ID = 5;
// Configure your mock DAO to return a real DomainBase
// when FindById is called.
mockDao
.Setup(dao => dao.FindById(TEST_ID, It.IsAny<Type>())
.Returns(new DomainBase() { Id = TEST_ID });
var domainObject = _hibernateService.FindById(TEST_ID , typeof(DomainBase));
// Make sure the returned object is a DomainBase with id == TEST_ID
Assert.IsEqual(TEST_ID , domainObject.Id);
Assert.IsInstanceOf<DomainBase>(domainObject);
// and verify that your mock DAO was called with the same argument passed to
// your NHibernate service wrapper:
mockDao.VerifyAll();
}
Вам не нужно издеваться над объектами вашего домена - вам, как правило, лучше издеваться над слоем данных и службами, а затем передавать реальные объекты домена (содержащие образец/ test data) между вашим тестируемым логическим кодом и слоями поддельных сервисов.
EDIT: для тестирования методов сохранения и удаления вы захотите сделать что-то подобное.Обратите внимание, как мы используем метод Callback () библиотеки Moq для запуска некоторого кода при вызове метода mock, и в рамках этого обратного вызова мы утверждаем, что объект, переданный нашему методу, был объектом, который мы ожидали:
[Test]
public void TestSaveDomainBase() {
const int OBJECT_ID = 5;
mockDao
.Setup(dao => dao.Save(It.IsAny<DomainBase>()))
.Callback((DomainBase d) => {
// Make sure the object passed to Delete() was the correct one
Assert.AreEqual(OBJECT_ID, d.ID);
});
var objectToSave = new DomainObject() { Id = OBJECT_ID };
_hibernateService.Save(objectToDelete);
mockDao.VerifyAll();
}
[Test]
public void TestDeleteDomainBase() {
const int OBJECT_ID_TO_DELETE = 5;
mockDao
.Setup(dao => dao.Delete(It.IsAny<DomainBase>()))
.Callback((DomainBase d) => {
// Make sure the object passed to Delete() was the correct one
Assert.AreEqual(OBJECT_ID_TO_DELETE, d.ID);
});
var objectToDelete = new DomainObject() { Id = OBJECT_ID_TO_DELETE };
_hibernateService.Delete(objectToDelete);
mockDao.VerifyAll();
}