У меня есть функция, которая обновляет пользователя в поставщике членства asp.net.
<AcceptVerbs(HttpVerbs.Post)>
Public Function EnableUser(ByVal id As String) As JsonResult
Dim usr As StargatePortalUser = _membershipService.GetUser(id, Nothing)
usr.IsApproved = True
_membershipService.UpdateUser(usr)
Dim response As New AjaxResponse(usr.UserName)
Return Json(response)
End Function
Я пытаюсь проверить эту функцию, чтобы убедиться, что свойство IsApproved установлено правильно
<TestMethod()>
Public Sub Service_Can_Enable_A_User_Account()
' Arrange
Dim usr As New Mock(Of MembershipUser)
usr.SetupProperty(Function(u) u.IsApproved)
_membershipService.Setup(Function(m) m.GetUser(It.IsAny(Of String), It.IsAny(Of Boolean))).Returns(usr.Object)
Dim target As New UsersController(_membershipService.Object)
target.ControllerContext = New ControllerContext(FakeAuthenticatedHttpContext("testuser", String.Empty, True, True, False), New RouteData, target)
' Act
Dim actual As JsonResult = target.EnableUser("userId")
' Assert
Assert.IsTrue(DirectCast(actual.Data, AjaxResponse).Success)
_membershipService.Verify(Sub(m) m.UpdateUser(It.IsAny(Of MembershipUser)), Times.Once)
usr.Verify(Function(u) u.IsApproved = True)
End Sub
Когда я пытаюсь убедиться, что для свойства IsApproved установлено значение True, возвращается исключение:
System.ArgumentException: выражение не является вызовом метода: u => (u.IsApproved == True)
Существует так мало примеров использования Moq в VB, что я не могу понять это, любая помощь будет оценена.
Это приложение ASP.NET MVC2 в VB.NET 10 (.NET 4.0)
EDIT:
Хорошо, оказывается, в VB все не так просто.
usr.Verify(Function(u) u.IsApproved = True)
должно быть
usr.VerifySet(Function(u) InlineAssignHelper(u.IsApproved, True))
и вам нужно добавить следующую функцию:
Private Shared Function InlineAssignHelper(Of T)(ByRef target As T, ByVal value As T) As T
target = value
Return value
End Function
ДОПОЛНИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ:
Обдумывая проблему, я пришел к более простому решению. Я изменил
Dim usr As New Mock(Of MembershipUser)
usr.SetupProperty(Function(u) u.IsApproved)
_membershipService.Setup(Function(m) m.GetUser(It.IsAny(Of String), It.IsAny(Of Boolean))).Returns(usr.Object)
для
Dim usr As New Mock(Of MembershipUser)
usr.SetupProperty(Function(u) u.IsApproved)
Dim usrObj = usr.Object
_membershipService.Setup(Function(m) m.GetUser(It.IsAny(Of String), It.IsAny(Of Boolean))).Returns(usrObj)
и затем может заменить
usr.VerifySet(Function(u) InlineAssignHelper(u.IsApproved, True))
с более простым
Assert.IsTrue(usrOb.IsApproved)
Иногда я просто не вижу простого решения:)