2011-12-05 122 views
0

我正在考虑扔掉我下一个项目中的所有存储库类,并直接在我的服务类中使用ISession。原因在于我的存储库类只是倾向于将调用转发给ORM(即没有真正的逻辑)。nhibernate测试策略

这个最大的缺点是,它使得单元测试更加努力,如果有任何其他的方法来测试我的服务,而一个数据库中,我不知道(没有在内存数据库SQLite的一样,请)?嘲笑ISession是个坏主意吗?

或者我应该坚持使用瘦存储库类吗?

+0

我不明白'没有数据库'的要求;假设你在服务类中有类似的东西:'Session.Query 。Where(u => u.Domain = domain)'。你不想测试这个查询来看它是否产生了正确的SQL和正确的结果吗?你会怎么做? –

+0

@sJhonny:集成测试,而不是单元测试。 – jgauffin

回答

0

它可能看起来很容易嘲笑ISession,但我发现很难做一个适当的模拟。特别是如果使用LINQ扩展方法。

我会坚持存储库。理解存储库方法的预期要比通用接口(如ISession)更容易理解。

0

它是一个坏主意,嘲笑的Isession?

不,这不是一个坏主意。如果你的服务类依赖于ISession,那么你可以做些什么来测试你的服务类。虽然有一个设计的气味,因为你的服务类依赖NHibernate,但我想你可以忍受。

+0

请详细说明为什么ORM依赖是一种设计气味? (它们不是WCF服务类) – jgauffin

+0

@jgauffin,这是因为服务层应该是ORM不可知的。它是特定于某个数据库或ORM(如果使用任何)的DAL层。如果将来您决定更改数据访问策略或ORM,则不需要修改服务层。但如果这是你不打算的东西,正如我所说的,你可以在你的服务层中使用ISession。 –

+0

@jgauffin,在理想的世界中,您想要分离所有可能具有特定于某个ORM提供程序的DAL层的DAL层,该层提供程序实现您的存储库接口,从而在模型上提供简单的原子操作,然后服务层将这些存储库接口作为构造函数参数。 –