抱歉,我对存储库模式、单元测试和 orm 工具还不熟悉。
我一直在研究单元测试和存储库模式,并得出一些结论,我想知道我是否正确。
存储库模式有助于在使用它的控制器中替换单元测试,例如,对吧?因为创建上下文(在 EF 中)或会话(在 NH 中)的存根/伪造比较困难,对吧?存储库本身没有经过测试?为什么?
使用 EntityFramework 或 NHibernate 与存储库模式,如果我想测试我的存储库,我需要进行集成测试吗?因为如果我使用上下文/会话的假实现,我就不会进行真正的测试?因为上下文/会话本身就是存储库(我的意思是它们实现了添加、删除、编辑、GetById、GetAll 等真正的逻辑)?
带有 EF 或 NH 的存储库模式就像一个包装器? (不仅仅是一个包装器,我知道这是域的一个重要概念。)
存储库 http://domaindrivendesign.org/node/123接口属于领域层。但实现属于基础设施或数据访问层。此实现通常未经测试unit测试。它大量使用 ORM API,因此单独测试存储库非常困难且浪费。此问题并非特定于存储库:不要嘲笑你不拥有的类型。 http://www.davesquared.net/2011/04/dont-mock-types-you-dont-own.html
存储库应该进行测试一体化使用真正的 ORM 进行测试。在记忆中 http://ayende.com/blog/3983/nhibernate-unit-testing数据库是一个非常popular http://devlicio.us/blogs/krzysztof_kozmic/archive/2009/08/14/testing-with-nhibernate-and-sqlite.aspx解决这个问题的方法。
...因为如果我使用假货
我的上下文/会话的实现我没有进行真正的测试?
即使你设法做到了(我真的怀疑 NHibernate 的情况),你也会浪费时间。会话/上下文接口不受您的控制,您的测试只会重申您对真实事物如何工作的猜测。
因为上下文/会话本身就是存储库?
否。 Context/Session 是以下的实现工作单元 https://stackoverflow.com/questions/6941573/repository-vs-unitofwork/6941746#6941746图案。它不是您的域的一部分。这是基础设施。
带有 EF 或 NH 的存储库模式就像一个包装器?
存储库是重要的领域概念,它不仅仅是一个“包装器”。就像您的应用程序不是数据库的“包装器”一样。我认为DDD存储库接口定义应该基于无处不在的语言 http://domaindrivendesign.org/node/132尽可能多,并且不应包含任何 ORM 相关的单词或类型。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)