vb.net - 使用 Moq 模拟 VB.NET 方法

标签 vb.net unit-testing moq

我正在尝试对使用成员资格提供程序更新用户详细信息的 Controller 操作进行单元测试。我正在使用 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

模拟成员(member)服务的设置无法编译,错误是:

Overload resolution failed because no accessible 'Setup' can be called with these arguments:

'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)': Expression does not produce a value.

'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)': Data type(s) of the type parameter(s) cannot be inferred from these arguments. Specifying the data type(s) explicitly might correct this error.

'Public Function Setup(expression As System.Linq.Expressions.Expression(Of System.Action(Of Services.IMembershipService))) As Moq.Language.Flow.ISetup(Of Services.IMembershipService)': Expression does not produce a value.

我错过了什么?每当我的类有我想要调用的方法时,我是否必须创建一个假类而不是使用 Moq?

编辑:

好吧,稍微阅读一下就会发现这是由于 VB 中使用 Function() 表达 lambda 的方式造成的,而 Function() 必须有一个结果。

有没有人找到解决这个问题的方法,或者我是否必须放弃 Moq 来使用伪造方法?

最佳答案

在 Visual Studio 2010 中使用

serviceMock.Setup(Sub(c) c.MethodName(paramName))

此外,请确保模拟实体 (serviceMock) 被模拟为接口(interface),或者将 MethodName 声明为可重写。

关于vb.net - 使用 Moq 模拟 VB.NET 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1157679/

相关文章:

sql - 在 SQL Server 2008 R2 中将数据写入二进制字段

c# - 在VB.NET中初始化ExtendWebBrowser,从C#到VB.Net解析问题

laravel - PHPUnit 6.2 fatal error : Class 'Eloquent' not found in/. ../Database/Model.php

c# - 连续两次对同一方法的最小起订量期望

c# - Moq 回调方法未在 lambda 表达式中命中

c# - 单元测试扩展方法,尝试一下,这是正确的,还是绕着房子走?

arrays - 如何在VB.NET中制作具有透明背景色的标签?文本与其他内容重叠

.net - 方法摘要XML注释的良好做法

java - 如何对使用 javafx 文件选择器的方法进行单元测试

javascript - 在测试我的 AngularJS Controller 时,如何在 $http.get promise 中模拟结果?