Entity framework Assert.AreEqual DbContext实体单元测试
我希望对我的业务逻辑进行单元测试,通过业务逻辑加载实体,并将其与直接从dbcontext加载的实体进行比较,从而加载正确的数据 我猜Assert.AreEqual失败是因为实体是按跟踪方式加载的 我原以为可以使用AsNoTracking(),但它不起作用 是否有一种将实体从实体框架“展开”到POCO的方法 我读过关于禁用代理创建的内容,但这是唯一的选项吗Entity framework Assert.AreEqual DbContext实体单元测试,entity-framework,unit-testing,entity-framework-4.1,assert,Entity Framework,Unit Testing,Entity Framework 4.1,Assert,我希望对我的业务逻辑进行单元测试,通过业务逻辑加载实体,并将其与直接从dbcontext加载的实体进行比较,从而加载正确的数据 我猜Assert.AreEqual失败是因为实体是按跟踪方式加载的 我原以为可以使用AsNoTracking(),但它不起作用 是否有一种将实体从实体框架“展开”到POCO的方法 我读过关于禁用代理创建的内容,但这是唯一的选项吗 我希望与敲除javascript库中的ko.utils.unwrapObservable()类似(尽管我意识到了一个完全不同的概念)。这是一个
我希望与敲除javascript库中的ko.utils.unwrapObservable()类似(尽管我意识到了一个完全不同的概念)。这是一个奇怪的集成测试(它根本不是单元测试,因为它使用数据库)-只需定义静态期望值就足够了,而不是从数据库中再次加载它。动态测试更容易出错,并且可以隐藏问题
要使其工作,您必须覆盖
Equal
以比较数据而不是引用。禁用代理创建将不起作用,因为您的业务逻辑仍然有不同的引用,测试上下文也有不同的引用(除非您共享该上下文,但在这种情况下,测试将更加奇怪) 谢谢@Ladisslav。很好的一点是:“它根本不是单元测试,因为它使用数据库”,单元测试感觉不太正确,我正计划让它们更好。你的意思是因为它使用数据库来实现它的“预期”还是因为它使用数据库?因为它使用数据库。单元测试应该独立于外部因素来测试单个单元。谢谢,代码让我不寒而栗,我希望尽快重构它。谢谢你的帮助。