Context.Database.SqlQuery<Books>(“从书中选择*”) - 如何moq Context.Database.SqlQuery方法

问题描述 投票:0回答:1

你怎么可以嘲笑

Context.Database.SqlQuery<Books>("select statement").ToList() 

为了进行单元测试的声明?

.net asp.net-mvc entity-framework
1个回答
0
投票

如果存在某种允许的多态性,则只能用 Test Doubles 替换依赖项。 对象必须实现接口,或者方法必须是虚拟的,以便您可以覆盖它。

据我所知,您想替换

SqlQuery 方法。该方法不是虚拟的,也不是接口的一部分。因此,你不能用 Test Double 替换它,无论它是 Moq、NSubstitute、FakeItEasy 等。

正如 Alexander Petrov 在

a comment 中所写,有些框架可能能够拦截像 SqlQuery

 这样的方法,但我不会建议您使用它们,因为它们可能会导致代码和难以维护的测试。

相反,请考虑更改被测系统的架构,使其变得可正确测试。关于这个主题已经写了整本书,最著名的是“有效地使用遗留代码”。

© www.soinside.com 2019 - 2024. All rights reserved.