最小起订量错误 "An expression tree may not contain a call or invocation that uses optional arguments"

Error in moq "An expression tree may not contain a call or invocation that uses optional arguments"

尝试使用 Moq C#

模拟 AWS Cognito 注册方法时
 public async void Signup(UserTO user)
    {

        var req = new SignUpRequest()
        {

        };
        _cognito.Setup(m =>
            m.SignUpAsync(It.IsAny<SignUpRequest>())) // LOE
            .ReturnsAsync(() =>
            new SignUpResponse()
            {

            });
    }

但是在#LOE,出现以下错误

Error CS0854 An expression tree may not contain a call or invocation that uses optional arguments

如果我按 f12 获取 SignUpAsync() 的定义,它看起来像

Task<SignUpResponse> SignUpAsync(SignUpRequest request, CancellationToken cancellationToken = default(CancellationToken));

是什么原因导致此错误以及如何消除此错误?

谢谢!

mock 期望整个成员定义为 configured/setup

期望选项参数使用 It.IsAny<CancellationToken>()

public async Task Signup(UserTO user) {

    var req = new SignUpRequest() {

    };
    _cognito.Setup(m =>
        m.SignUpAsync(It.IsAny<SignUpRequest>(), It.IsAny<CancellationToken>())
    )
    .ReturnsAsync(() => new SignUpResponse());

    //...
}
Task<SignUpResponse> SignUpAsync(SignUpRequest request, CancellationToken cancellationToken = default(CancellationToken));

cancellationToken 参数导致错误,您需要为模拟指定 CancellationToken,因为不允许使用默认 default(CancellationToken) 值。

尝试

        _cognito.Setup(m =>
            m.SignUpAsync(It.IsAny<SignUpRequest>(), It.IsAny<CancellationToken >())) // LOE
            .ReturnsAsync(() =>
            new SignUpResponse()
            {

            });