Использование VerifySet Moq в VB.NET - PullRequest
2 голосов
/ 12 июля 2010

У меня есть функция, которая обновляет пользователя в поставщике членства 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)

Иногда я просто не вижу простого решения:)

Ответы [ 2 ]

1 голос
/ 13 июля 2010

Вы хотите использовать следующее (из http://code.google.com/p/moq/wiki/QuickStart):

// или напрямую проверять установщик.1006 *

Прямо сейчас, то, что вы вводите, - это сравнение, а не присвоение, поэтому, даже если Moq обработал оператор без исключения, он все равно не будет делать то, что вы имеете в виду.

0 голосов
/ 31 января 2018

Ну, это может быть немного поздно, но я столкнулся с той же проблемой, и решение было намного проще, чем использование метода InlineAssignHelper.

Просто измените функцию на Sub , и она должна работать.

Так что попробуйте это вместо:

usr.VerifySet(Sub(u) u.IsApproved = True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...