如何使用FakeItEasy伪造一个通用方法调用?

4

我正在模拟一个 IDbConnection,并且想要模拟调用 QueryOne<T>()(一个 Dapper 扩展),但是在这样做时我遇到了 NullReferenceException

以下是我的代码:

IDbConnection myConnection = A.Fake<IDbConnection>();


A.CallTo(() => myConnection.QueryOne<MyDto>(A<string>.Ignored,  <IDbConnection>.Ignored, A<IDbTransaction>.Ignored))
.Returns(new MyDto());

在FakeItEasy中,是否可以模拟调用一个通用方法,为什么我会得到异常?感谢您的提前帮助。-Christian
1个回答

7

由于Dapper使用扩展方法来提供其功能,并且扩展方法只是一种高级的静态方法,我认为您无法使其正常工作。根据我所读到的(请参见此问题),FakeItEasy无法拦截静态方法。


实际上,扩展不太适合单元测试。我的建议是使用一个接口来模仿你所做的 dapper 调用,并针对这些接口进行编程,使你的单元测试更容易编写。 - Phil Cooper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接