如何验证从db正确获取集合?

时间:2011-07-05 13:46:59

标签: nhibernate repository integration-testing

我正在尝试为我的存储库编写集成测试,但我找不到一种很好的方法来断言结果是我想要的结果。

我的所有测试数据都有一个具有静态属性的类 - 项目,用户等。在我的测试设置中,我使用NHibernate在我的数据库中插入所有这些实体(我已经能够验证这是否有效) - 设置完成后,记录就在那里。)

我的存储库(略微简化)执行此操作:

public IEnumerable<MyEntity> GetEntitiesByProjectID(id)
{
    return session.Linq<MyEntity>().Where(e => e.Project.ID == id).ToList();
}

在我的测试中,我尝试断言结果是正确的,如下面的代码示例所示,但由于几个原因,集合不等同 - 主要的一个是引用其他entites被替换为城堡代理({{1而不是Castle.Proxies.UserProxy)。

User

还有其他一些奇怪的东西 - 例如表示日期时间的方式。在我的.NET类型中,日期时间字符串表示为Assert.AreElementsEqualIgnoreOrder( Data.MyEntites.Where(e => e.Project.ID == 1), results) ,而来自数据库的表示为2011-07-05T14:28:11.5655935+02:00,即没有时区指示符。

通过检查,我可以验证存储库是否真正获取了正确的元素,因此我的测试显然是在测试错误的东西。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

您确定要测试数据层吗?我相信NHIbernate经过了很好的测试,您必须测试服务层并为数据提供模拟。

如果不是这种情况,请在集成测试期间将延迟加载设置为false,它应该有助于解决UserProxy而不是用户问题。 对于datetime问题,请检查数据库中有哪些数据类型的列,有:datetime,datetime2,date ...检查列是否支持时区