我正在尝试对使用成员资格提供程序更新用户详细信息的控制器操作进行单元测试。我正在使用迄今为止很容易使用的最小起订量。
问题是我似乎无法让它模拟对不返回任何内容的方法的调用。
<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
模拟会员服务的设置不会编译,错误是:
重载解析失败,因为无法使用这些参数调用可访问的“设置”:
'公共功能设置(TResult)(表达式为 System.Linq.Expressions.Expression(系统.Func(服务.IMembershipService,TResult)))作为 Moq.Language.Flow.ISetup(Service.IMembershipService,TResult)' : 表达式不产生值。
'公共功能设置(TResult)(表达式为 System.Linq.Expressions.Expression(系统.Func(服务.IMembershipService,TResult)))作为 Moq.Language.Flow.ISetup(服务.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?
编辑:
好的,一点点阅读表明这是由于 lambda 在 VB 中使用 Function() 表示的方式,它必须有一个结果。
有没有人找到解决这个问题的方法,或者我将不得不放弃起订量来伪造方法?