estoy tratando de probar la unidad una acción de controlador que utiliza el proveedor de pertenencia para actualizar los datos de usuario. Estoy usando Moq, que hasta ahora ha sido fácil de usar.burlando de Métodos VB.NET Con Moq
El problema es que parece que no puede conseguir que se burlan de las llamadas a métodos que no devuelven nada.
<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
La configuración del servicio de suscripción burlado no se compilará, el error es:
resolución de sobrecarga fracasó porque no accesible 'Configuración' puede ser llamada con estos argumentos:
'Función pública Configuración (de TResult) (expresión Como System.Linq.Expressions.Expression (Of System.Func (Of Services.IMembershipServic e, TResult))) Como Moq.Language.Flow.ISetup (Of Services.IMembershipService, TResult) ': Expression no produce un valor.
'Configuración de la Función Pública (De TResult) (expresión Como System.Linq.Expressions.Expression (De System.Func (De Services.IMembershipService, TResult))) Como Moq.Language.Flow. ISetup (Of Services.IMembershipService, TResult) ': El (los) tipo (s) de datos del tipo parámetro (s) no se pueden inferir de estos argumentos. La especificación de los datos tipo (s) podría explícitamente corregir este error .
'Función Pública configuración (expresión como System.Linq.Expressions.Expression (De System.Action (De Services.IMembershipService))) Como Moq.Language.Flow.ISetup (De Services.IMembershipService) ': La expresión no produce un valor.
Qué me he perdido? ¿Voy a tener que crear una clase falsa en lugar de usar Moq cada vez que mi clase tenga un método al que quiera llamar?
Editar:
Ok, un poco de lectura en torno sugiere que esto se debe a la forma en lambdas se expresan en VB usando la función() que debe tener un resultado.
Alguien ha encontrado una solución alternativa para esto o voy a tener que deshacerse de Moq por falsificar métodos?
:(Es una pena realmente, aparte de esto, estoy realmente amando a Moq. Si sugiero al jefe, posponemos el desarrollo por otro año para que puedan sacar el VB10 ¡Creo que me matará! – Nick