我如何测试NHibernate的Restrictions.Not?

时间:2013-10-23 07:25:18

标签: c# unit-testing nhibernate nunit xunit.net

我正在尝试测试我的代码。需要测试与NHibernate的Criteria一起使用的模块的功能。例如,这是我的一个单元测试。

[Fact]
public void test_name()
{
  var criteria = ... // creates mock criteria
  MyModule.DoWork(criteria); // adds restrictions to criteria

  Assert.True(/* check if criteria.Add() was called
  and what arguments were passed */);
}

如果MyModule.DoWork()添加了Restrictions.Eq(),则没有问题,因为它返回一个SimpleExpression,我可以检查expression.PropertyName和expression.Value。但如果相反它添加了Restrictions.Not(Restrictions.Eq())(返回AbstractCriterion),则无法检查PropertyName和Value。

在这种情况下我该怎么办?如何测试Restrictions.Not?

1 个答案:

答案 0 :(得分:1)

例如,您可以测试ToString()的{​​{1}}结果(NotExpression应该是嵌套的私有AbstractCriterion

无论如何,我认为这不是一个好主意。我可能在这里偏离主题,但我宁愿测试结果的行为而不是结构或_criterion的结果。主要观点是(恕我直言)代码的作用,而不仅仅是它对你对目标数据结构的了解。

我想最好设置一个内存数据库(想到SqlLite)并测试在测试集上应用你的限制。它似乎与NH的测试方式类似(部分)https://github.com/nhibernate/nhibernate-core/blob/master/src/NHibernate.Test/Criteria/CriteriaQueryTest.cs