我在试着测试我的代码。需要测试使用NHibernate标准的模块的功能。例如,这里是我的一个单元测试。
[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和值。
在这种情况下我该怎么办?如何对Restrictions.Not进行测试?
发布于 2013-10-23 08:08:16
例如,您可以测试ToString()的AbstractCriterion结果(应该是带有嵌套私有_criterion的NotExpression )。
不管怎样,我不认为这是个好主意。我在这里可能有些离题,但我宁愿测试结果的行为,而不是它的结构,或者ToString()的结果。主要问题是(IMHO)代码所做的事情,而不仅仅是它是否符合您对目标数据结构的知识。
我想最好是设置一个内存中的数据库(想到了SqlLite ),并在测试集上应用您的限制进行测试。这似乎与NH测试https://github.com/nhibernate/nhibernate-core/blob/master/src/NHibernate.Test/Criteria/CriteriaQueryTest.cs的方式类似。
https://stackoverflow.com/questions/19535381
复制相似问题