Спасибо, Рубен!
И чтобы помочь кому-то с Vcha.Net, попробуйте тот же код в VB.Net: * 1003.
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
Здесь важно, что вы не можете использовать одну строку Функция лямбда, поскольку это будет интерпретироваться как выражение, которое возвращает значение, а не как оператор присваивания, который вы после.
Это связано с тем, что VB.Net использует один знак равенства не только для присваивания, но и для сравнения на равенство, и поэтому пытается сделать
xyz.VerifySet(Function(s) s.AA = It.IsAny(Of String)(), Times.Never())
будет интерпретироваться как логическое сравнение s.AA-значения и It.IsAny (Of String) (), вызывая, таким образом, метод получения, что снова приведет к ошибке компиляции.
Вместо этого вы хотите использовать Sub лямбда (или, возможно, многострочную лямбда-функцию).
Однако, если у вас есть геттер для свойства, лямбда-функция все равно будет работать.