2013-01-14 109 views
3

我有类似HQL查询工厂,它生成纯字符串HQL查询。如何通过实际执行查询来完成对某些语法错误的单元测试,而不对数据库进行集成测试?单元测试HQL查询

最好的选择是调用一些神奇的VerifyHql()方法,或者可能在某处使用它并捕获一些有意义的解析异常或其他东西。

回答

3

测试没有数据库查询的查询没什么意义,所以应该使用集成测试来测试这些查询。但是,您可以use an in memory SQLite database而不是打到真正的服务器。有一个NuGet SQLite package可用。

+0

杰米,你明白了! Denis,你可以下载NHibernate代码并观察'HQL'测试。 (在执行任何'HQL'测试之前,测试*数据*在数据库中刷新......) –

+0

嗯,我仍然认为它在某些情况下是有意义的。一个例子是测试动态构建的非常复杂的HQL查询(很少见,但我必须处理非常复杂的查询)。虽然这个查询的测试数量非常大,并且对内存数据库进行了测试,但我仍然会看到一些快速语法测试的价值。为什么我会说为了检查映射的完整性而进行的测试也很有价值,而没有针对每个映射的细节进行集成测试,这一点就会变得相同。 –