Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如何模拟返回任务的异步方法(IList的(PasswordChangeHistory的))_Vb.net_Unit Testing - Fatal编程技术网

Vb.net 如何模拟返回任务的异步方法(IList的(PasswordChangeHistory的))

Vb.net 如何模拟返回任务的异步方法(IList的(PasswordChangeHistory的)),vb.net,unit-testing,Vb.net,Unit Testing,这就是我想模仿的方法: Function ReturnPasswordHistoryAsync(passwordChangeHistory As PasswordChangeHistory) As Task(Of IList(Of PasswordChangeHistory)) 这是我的单元测试: <TestMethod()> Public Async Function ValidateNewPassword_NewPasswordHasAlreadyBeenUsed_Passwo

这就是我想模仿的方法:

Function ReturnPasswordHistoryAsync(passwordChangeHistory As PasswordChangeHistory) As Task(Of IList(Of PasswordChangeHistory))
这是我的单元测试:

<TestMethod()> Public Async Function ValidateNewPassword_NewPasswordHasAlreadyBeenUsed_PasswordIsNotValid() As Task
        'Arrange
        Dim newPass = "newPass"
        Dim oldPass = "oldPass"
        Dim confirmPass = newPass
        Dim passwordValid As PasswordValid
        Dim ret As Task(Of IList(Of PasswordChangeHistory))

        'Errors here with null object reference error
        _mockChangePasswordRepo.Setup(Function(x) x.ReturnPasswordHistoryAsync(New PasswordChangeHistory())).Returns(ret)

        'Act
        passwordValid = Await _changePasswordManager.ValidateNewPassword(oldPass, newPass, confirmPass, Nothing)

        'Assert
        Assert.IsFalse(passwordValid.IsValid, "New password and old passord equal one another yet the test passed")
    End Function
公共异步函数ValidateNewPassword\u NewPasswordHasAlreadyBeenUsed\u PasswordIsNotValid()作为任务
“安排
Dim newPass=“newPass”
Dim oldPass=“oldPass”
Dim confirmPass=新建过程
Dim passwordValid作为passwordValid
Dim ret作为任务(IList的(PasswordChangeHistory的))
'此处的错误为空对象引用错误
_mockChangePasswordRepo.Setup(函数(x)x.ReturnPasswordHistoryAsync(新的PasswordChangeHistory())。返回(ret)
“行动
passwordValid=wait\u changePasswordManager.ValidateNewPassword(旧密码、新密码、确认密码、无密码)
“断言
Assert.IsFalse(passwordValid.IsValid,“新密码和旧密码彼此相等,但测试通过”)
端函数
我相信这是由于返回错误,但我不确定如何模拟返回类型。有人知道如何模拟
任务(IList(PasswordChangeHistory))的返回类型吗

事实证明,这实际上是一个IF语句。结果是
Nothing
,因此我认为IF会计算第二个方面,如果返回false,则跳过第二个部分。但事实并非如此,因此伯爵抛出了一个异常

这就是修复方法:

  If results IsNot Nothing OrElse results.Count = 0 Then
            Return False
        End If
和-评估双方

AndElse—然后一方确定IF是否有效

与Or和OrElse相似


从C#到VB很奇怪,我想念我的语法糖

看起来你在用Moq。对于模拟异步返回值,可以使用
ReturnsAsync

 Dim ret As IList(Of PasswordChangeHistory) = New List(Of PasswordChangeHistory)

 'Setup member to expect any value of PasswordChangeHistory and return a list after an async call
_mockChangePasswordRepo.Setup(Function(x) x.ReturnPasswordHistoryAsync(It.IsAny(Of PasswordChangeHistory))).ReturnsAsync(ret)

这将允许模拟通过异步/等待调用。

看起来您正在使用Moq。对于模拟异步返回值,您可以使用
ReturnsAsync
这是我的答案和您的答案的混合。谢谢你,小伙子
 Dim ret As IList(Of PasswordChangeHistory) = New List(Of PasswordChangeHistory)

 'Setup member to expect any value of PasswordChangeHistory and return a list after an async call
_mockChangePasswordRepo.Setup(Function(x) x.ReturnPasswordHistoryAsync(It.IsAny(Of PasswordChangeHistory))).ReturnsAsync(ret)