0

我希望通过业务逻辑加载实体并将其与直接从dbcontext加载的实体进行比较来加载正确的数据,以便单元测试我的业务逻辑。Assert.AreEqual单元测试DbContext实体

Assert.AreEqual失败我猜测是因为实体被加载为跟踪。

我认为我可以使用AsNoTracking(),但它不起作用。

是否存在将实体从实体框架“展开”到POCO的方式?

我已阅读关于禁用proxycreation,但是这是唯一的选择吗?

我希望有类似的东西(虽然我认识到一个完全不同的概念),在淘汰JavaScript库中的ko.utils.unwrapObservable()。

回答

1

这是一个奇怪的集成测试(它根本不是单元测试,因为它使用数据库) - 它应该足以简单地定义静态期望而不是从数据库再次加载它。动态测试更容易出错,并可能隐藏问题。

要使其正常工作,您必须覆盖Equal以比较未引用的数据。禁用代理创建将不起作用,因为您将仍然有不同的业务逻辑引用和来自测试上下文的不同引用(除非您共享上下文,但在这种情况下测试会更奇怪)。

+0

Thanks @Ladisslav。好点:“它不是单元测试,因为它使用数据库”,单元测试感觉不太对,我打算让它们变得更好。你的意思是因为它用于数据库的“预期”还是因为它使用数据库? –

+0

因为它使用数据库。单元测试应该独立于外部因素测试单个单元。 –

+0

很酷的感谢,代码让我不寒而栗,我希望尽快重构它。谢谢您的帮助。 –