我正在开展一个新项目,我正在积极尝试尊重持久性无知。例如,在我的服务层中,我从 ORM 中检索一个实体,然后调用在实体上定义的例程,该例程可能会或可能不会对实体进行更改。然后我依靠我的 ORM 来检测实体是否被修改并进行必要的插入/更新/删除。
当我运行该应用程序时,它按预期工作,并且看到它在运行中真的很整洁。我的业务逻辑非常孤立,我的服务层非常薄。
当然,现在我正在添加单元测试,我注意到我不能再编写单元测试来验证某些属性是否被修改。在我之前的解决方案中,我确定是否对处于预期状态的对象进行了存储库调用。
mockRepository.Verify(mr =>
mr.SaveOrUpdate(It.Is<MyEntity>(x =>
x.Id == 123 && x.MyProp == "newvalue")), Times.Once());
我是否正确地接近持久性无知?当我没有显式调用存储库的保存方法时,是否有更好的方法来对我的实体的操作后状态进行单元测试?
如果有帮助,我正在使用 ASP.NET MVC 3、WCF、NHibernate 和 NUnit/Moq。我的单元测试通过我的服务类的实例(使用模拟存储库实例化)调用我的控制器操作。