未验证最小起订量方法调用

moq method call not being verified

我有一个测试方法在 sso.verify 上失败了,注意 CheckUsername 方法在异步方法中有两个 await 调用吗?但正因为如此,sso verify never returns 因此未被验证。但是代码被调用了。测试这个的正确方法是什么?

       public void Setup()
    {
        nav = new Mock<INavService>();
        sso = new Mock<ISSOApiService>();
        _vm_Successs = new ForgotPasswordViewModel(nav.Object, sso.Object);
        sso.Setup(x => x.SendEmailCodeRequestAsync(It.IsAny<PasswordTokenRequest>())).ReturnsAsync(new StandardResponse() { ErrorCode = null }).Verifiable();
        nav.Setup(x => x.NavigateTo<ForgotPasswordEnterCodeModel, string>(It.IsAny<string>())).Verifiable(); 
    }


  [Test]
    public void CheckUserName_Success()
    {
        _vm_Successs.UserName = "Timmy";
        var response = _vm_Successs.CheckUsername();
        sso.Verify(e => e.SendEmailCodeRequest(It.IsAny<PasswordTokenRequest>()), Times.Once);
        nav.Verify(mock => mock.NavigateTo<ForgotPasswordEnterCodeModel, string>(It.IsAny<string>()), Times.Once);
    }

这是检查用户名的方法

public async Task CheckUsername()
{
            PasswordTokenRequest r = new PasswordTokenRequest();
                await SSOAPIService.SendEmailCodeRequestAsync(r);
            await NavService.NavigateTo<ForgotPasswordEnterCodeModel, string>(UserName);
        }

您应该等待测试方法,因此您需要进行测试 'async Task' 类型

还需要设置 SendEmailCodeRequestAsync 和 ReturnsAsync

    [Test]
    public async Task ShouldDeleteAzureBlobById()
    {
        sso.Setup(x => x.SendEmailCodeRequestAsync(It.IsAny<PasswordTokenRequest>()))
        .ReturnsAsync(new StandardResponse() { ErrorCode = null })
        .Verifiable();

        _vm_Successs.UserName = "Timmy";
        var response = await _vm_Successs.CheckUsername();
        sso.Verify(e => e.SendEmailCodeRequestAsync(It.IsAny<PasswordTokenRequest>()), Times.Once);
        nav.Verify(mock => mock.NavigateTo<ForgotPasswordEnterCodeModel, string>(It.IsAny<string>()), Times.Once);
    }