我正在尝试对使用成员资格提供程序更新用户详细信息的控制器操作进行单元测试。我正在使用Moq,到目前为止它很容易使用。
问题是我似乎无法将其模拟为调用不返回任何内容的方法。
<TestMethod()> _
Public Sub Can_Update_User()
' Arrange
_membershipService.Setup(Function(x) x.UpdateUser(It.IsAny(Of MembershipUser)))
Dim controller As New UsersController(_membershipService.Object, _roleProvider.Object, _supportWorksService.Object, _portalClientService.Object)
' Act
Dim result As ViewResult = controller.Edit("testUser", New FormCollection)
' Assert
Assert.AreEqual("Index", result.ViewName)
End Sub
模拟成员服务的设置无法编译,错误如下所示:
重载解析失败,因为没有可访问的“Setup”可以使用这些参数进行调用: -“Public Function Setup(Of TResult)(expression As System.Linq.Expressions.Expression(Of System.Func(Of Services.IMembershipService, TResult))) As Moq.Language.Flow.ISetup(Of Services.IMembershipService, TResult)”:表达式不产生值。 -“Public Function Setup(Of TResult)(expression As System.Linq.Expressions.Expression(Of System.Func(Of Services.IMembershipService, TResult))) As Moq.Language.Flow.ISetup(Of Services.IMembershipService, TResult)”:类型参数的数据类型不能从这些参数中推断出来。显式指定数据类型可能会纠正此错误。 -“Public Function Setup(expression As System.Linq.Expressions.Expression(Of System.Action(Of Services.IMembershipService))) As Moq.Language.Flow.ISetup(Of Services.IMembershipService)”:表达式不产生值。
我错过了什么?难道每当我的类有一个我想要调用的方法时,我都必须创建一个虚假类而不是使用Moq吗?
编辑: 好吧,一些阅读提示这是由于VB中使用Function()表达Lambda方式必须具有结果。
是否有人找到了解决方法或者我必须放弃使用Moq来伪造方法?