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)