Gracias Ruben!
Y para ayudar a alguien con un VB.Net Gotcha este es el mismo código en VB.Net:
Public Interface Xyz
WriteOnly Property AA As String
End Interface
Public Class VerifySyntax
<Fact()>
Public Sub ThisIsHow()
Dim xyz = New Mock(Of Xyz)
xyz.Object.AA = "bb"
' Throws:
xyz.VerifySet(Sub(s) s.AA = It.IsAny(Of String)(), Times.Never())
End Sub
End Class
Public Class SetupSyntax
<Fact()>
Public Sub ThisIsHow()
Dim xyz = New Mock(Of Xyz)
xyz.SetupSet(Sub(s) s.AA = It.IsAny(Of String)()).Throws(New InvalidOperationException())
Assert.Throws(Of InvalidOperationException)(Sub() xyz.Object.AA = "bb")
End Sub
End Class
importante aquí es que usted no puede utilizar una función de una sola línea lambda, ya que esto se interpretará como una expresión que devuelve un valor, en lugar de la declaración de asignación que está buscando. Esto es desde VB.Net utiliza el signo igual única no sólo para la asignación, sino también para la comparación de igualdad, y así tratar de hacer
xyz.VerifySet(Function(s) s.AA = It.IsAny(Of String)(), Times.Never())
será interpretado como una comparación booleana de la s.AA-valor y la It.IsAny (Of String)(), invocando así al getter, que de nuevo dará como resultado un error de compilación. En su lugar, desea utilizar un Sub lambda (o posiblemente una función múltiple de línea lambda).
Si tiene un captador en la propiedad, sin embargo, una función lambda seguirá funcionando.
Estoy confundido, ¿cuál es el propósito de la prueba si el compilador detecta el hecho de que intentas llamar a un getter en una propiedad de solo escritura? Estoy seguro de que me falta algo aquí, tal vez una aclaración de OP? –
@Igor Zevaka y otros: 'view => view.SetOnlyValue 'genera' La propiedad' SetOnlyValue 'no tiene getter'. Esto se debe a que este fragmento de código se interpreta como una llamada a un getter. En el caso de lectura y escritura, 'VerifySet' recorre la expresión y se da cuenta de que lo que se busca es una expectativa para el que establece la propiedad. En el caso de solo escritura, esto se ejecuta en un error de compilación. Tenemos que suponer que el OP no es estúpido aquí y no está tratando de causar trabajo por sí mismo y, en cambio, se está preguntando '¿cómo puedo evitar tener que hacer más basura'? –
Oh lo entiendo. Entonces, se trataba de configurar una verificación en moq que no dependiera de una propiedad que requiera getter, ¿correcto? –