你怎么可以嘲笑
Context.Database.SqlQuery<Books>("select statement").ToList()
为了进行单元测试的声明?
如果存在某种允许的多态性,则只能用 Test Doubles 替换依赖项。 对象必须实现接口,或者方法必须是虚拟的,以便您可以覆盖它。
据我所知,您想替换SqlQuery 方法。该方法不是虚拟的,也不是接口的一部分。因此,你不能用 Test Double 替换它,无论它是 Moq、NSubstitute、FakeItEasy 等。
正如 Alexander Petrov 在a comment 中所写,有些框架可能能够拦截像 SqlQuery
这样的方法,但我不会建议您使用它们,因为它们可能会导致代码和难以维护的测试。相反,请考虑更改被测系统的架构,使其变得可正确测试。关于这个主题已经写了整本书,最著名的是“有效地使用遗留代码”。