【发布时间】:2011-07-05 13:46:58
【问题描述】:
我正在尝试为我的存储库编写一个集成测试,但我找不到一个好的方法来断言结果是我想要的。
我有一个包含所有测试数据的静态属性的类 - 项目、用户等。在我的测试设置中,我使用 NHibernate 将所有这些实体插入到我的数据库中(并且我已经能够验证它是否有效- 设置完成后记录就在那里)。
我的存储库(略微简化)是这样做的:
public IEnumerable<MyEntity> GetEntitiesByProjectID(id)
{
return session.Linq<MyEntity>().Where(e => e.Project.ID == id).ToList();
}
在我的测试中,我尝试断言结果是正确的,如下面的代码示例所示,但由于多种原因,集合不等价 - 主要是引用其他实体的原因被替换为城堡代理 (Castle.Proxies.UserProxy而不是User)。
Assert.AreElementsEqualIgnoreOrder(
Data.MyEntites.Where(e => e.Project.ID == 1), results)
还有其他一些奇怪的地方 - 例如日期时间的表示方式。在我的 .NET 类型中,日期时间字符串表示为 2011-07-05T14:28:11.5655935+02:00,而来自数据库的字符串表示为 2011-07-05T14:28:11.0000000,即没有时区指示符。
通过检查,我可以验证存储库确实获取了正确的元素,所以我的测试显然是在测试错误的东西。
我在这里做错了什么?
【问题讨论】:
标签: nhibernate repository integration-testing