我正在尝试使用 Moq 库模拟 Microsoft.Azure.EventGrid NuGet 包中的 IEventGridClient,以进行单元测试。
Mock<IEventGridClient> client = new();
client.Setup(x
=> x.PublishEventsAsync(It.IsAny<string>(),
It.IsAny<List<EventGridEvent>>(),
default))
.Returns(Task.CompletedTask);
但是,在调用安装程序时,我得到以下异常:
System.NotSupportedException : Unsupported expression: x => x.PublishEventsAsync(It.IsAny<string>(), It.IsAny<List<EventGridEvent>>(), CancellationToken)
Extension methods (here: EventGridClientExtensions.PublishEventsAsync) may not be used in setup / verification expressions.
Stack Trace:
Guard.IsOverridable(MethodInfo method, Expression expression) line 87
InvocationShape.ctor(LambdaExpression expression, MethodInfo method, IReadOnlyList`1 arguments, Boolean exactGenericTypeArguments, Boolean skipMatcherInitialization, Boolean allowNonOverridable) line 84
ExpressionExtensions.<Split>g__Split|5_0(Expression e, Expression& r, InvocationShape& p, Boolean assignment, Boolean allowNonOverridableLastProperty) line 234
ExpressionExtensions.Split(LambdaExpression expression, Boolean allowNonOverridableLastProperty) line 149
Mock.SetupRecursive[TSetup](Mock mock, LambdaExpression expression, Func`4 setupLast, Boolean allowNonOverridableLastProperty) line 606
Mock.Setup(Mock mock, LambdaExpression expression, Condition condition) line 510
Mock`1.Setup[TResult](Expression`1 expression) line 468
UnitTests.ShouldStopAppOnSqlExceptionWhenDeltaEventIsNull() line 25
--- End of stack trace from previous location ---
使用 Microsoft.Azure.EventGrid SDK 进行单元测试的推荐方法是什么。目前,我已经围绕 EventGridClient 编写了一个包装类,但我认为这是不必要的,因为该类已经实现了一个接口 IEventGridClient。
感谢任何指导.
Note:此问题总结整理于: Mocking IEventGridClient using the Moq library