是否可以使用PersistenceSpecification和CheckList对Inverse HasMany关系进行单元测试?

时间:2011-01-12 14:12:41

标签: nhibernate fluent-nhibernate domain-driven-design

这实际上是我在Stackoverflow上的第一个问题。我希望它不是最后一个,希望我会自己提供一些答案。

我的问题很简单。我坚持使用NUnit测试,我正在测试一个反向的HasMany关系。 每次我调试它,输出是“实际计数不等于预期计数...”。我已就网络问题进行了一些广泛的研究,有些人声称不可能做这样的单元测试。

这是我的例子。 EmployeeMapping代码:

 Id(x => x.ID).GeneratedBy.Identity();
 HasMany(x => x.PositionHistory).KeyColumn("Employee_id").Inverse().Cascade.All();

以下是EmployeePositionMapping的代码:

 Id(x => x.ID).GeneratedBy.Identity();
 References(x => x.EmployeeAtPosition).Cascade.All().Nullable();

单元测试是这样的:

 var position2 = new EmployeePosition();
            position2.ExtraBenefit = 353.00;
            position2.Salary = 23300.00;
            position2.Region = region;
            position2.Department = department;
            position2.Year = "2010";
            position2.Comment = "kommentar igen...";
            position2.History = true;
var positionList = new List<EmployeePosition>();

    positionList.Add(position2);

    new PersistenceSpecification<Employee>(Session, new CustomEqualityComparer<Employee, long>())
                     .CheckProperty(p => p.ID, Int64.Parse("1"))
                     .CheckList(p => p.PositionHistory, positionList, (emp, empPosition) => emp.AddEmployeePosition(empPosition))
                     .VerifyTheMappings();

我想将Nullable()属性替换为引用EmployeeAtPosition属性的Not.Nullable()。

我有一个实体基类,负责比较实体甚至瞬态。 AddEmployeePosition()负责为Employee.PositionHistory和EmployeePosition.EmployeeAtPosition维护关系。

当我在输出中查看Nhibernate SQL时似乎没问题。但由于某种原因,它与我准备的列表(positionList)

不相等

其他有用的事实:我正在运行Nhibernate 3.0和匹配流畅的Nhibernate二进制文件。三天前下载了他们。使用SQLite InMemory进行映射测试。

我非常感谢你提示给我的所有新角度......

/最好的问候BacceSR-来自一个非常雪的斯德哥尔摩。

2 个答案:

答案 0 :(得分:4)

嗯没有答案。最好自己回答这个:D。 好吧,我在一些谷歌搜索后找到了答案,目前CheckList方法存在一些问题。我使用了CheckComponent而且工作正常。现在“Parent”对象在其“Children”之前插入,因此没有错误。 CheckList尝试做相反的事情,根本不起作用......

答案 1 :(得分:0)

我今晚也遇到了这个问题,并且用这个非常奇怪的错误消息花了大约两个小时。在谷歌搜索之前浪费了很多时间检查每一行代码,知道这不是我的错,heheheh:D。

根据这个post,我们根本不能将它与inverse = true一起使用。不幸的是,CheckComponentList对我不起作用,我得到了同样的错误。

同样发现一个关于反向关键词的死简单explanation,恕我直言,真的是一个坏词。