【发布时间】:2018-05-01 13:55:13
【问题描述】:
我有一个单元测试来模拟以下控制器中使用的My.User.IsInRole(),
Public Class BookingController
Public Function GetUserRole() As String
If My.User.IsInRole("Agent") Then
result = "Login as Agent"
End If
```
End Function
End Class
尝试在此测试用例中设置模拟(VB 代码):
<TestMethod()>
Public Sub Test()
//Arrange
'Dim httpContext = New Mock(Of System.Web.HttpContextBase)()
Dim principal = New Moq.Mock(Of IPrincipal)()
'httpContext.Setup(Function(x) x.User).Returns(principal.[Object])
principal.Setup(Function(p) p.IsInRole("Agent")).Returns(True)
Thread.CurrentPrincipal = principal.[Object]
// Act
Dim result = controller.GetUserRole()
End Sub
调用GetUserRole()时,My.User.IsInRole("Agent")应该返回True,但它返回False。我的代码有什么问题吗?
关于此错误的任何建议。
【问题讨论】:
-
尝试使用
p.IsInRole(It.IsAny(Of String)())进行设置,看看是否会有所不同。被比较的编码文本可能是一个问题。 -
您还应该参考Moq Quickstart 以更好地了解如何使用模拟框架
-
@Nkosi 谢谢。我尝试使用起订量快速入门中指定的 It.IsAny(..),但出现异常错误:screencast.com/t/NT6Hzy6snmN
-
重新阅读错误信息。当
Returns中的回调需要一个函数时,您有一个 Sub,因为它应该返回一个值 -
如果将原理模拟分配给当前线程原理,则原始代码正在工作。
标签: asp.net-mvc vb.net unit-testing moq