我有一个单元测试来模拟以下控制器中的My.User.IsInRole()和ClaimsPrincipal。
当前线程原则已经分配了两次,因此只有第二个ClaimPrincipal正在工作,我该如何才能使两个模拟原理工作?
Node* Node::get_child(int i) /*const*/ { // cant be const for the return
if (i >= nodes.size()) {
return NULL;
}
return &nodes[i];
}
尝试在此测试用例中设置模拟(VB代码,C#也可以):
Public Class TestController
Public Function GetUserDetail() As String
If My.User.IsInRole("Agent") Then
result = "Login as Agent"
End If
If ClaimsPrincipal.Current.FindFirst(ClaimTypes.Name).Value = "user@hotmail.com" Then
result = result & " and Claim name is correct"
End If
Return result
End Function
End Class
所以一个是模拟主体,另一个不是模拟主体,我如何分配当前线程?
答案 0 :(得分:1)
第二个模拟重写了在线程上设置的第一个模拟。
使用模拟的ClaimsPrincipal
并设置必要的成员
<TestMethod()>
Public Sub Test()
//Arrange
Dim fackClaimPrinciple = New Mock(Of ClaimsPrincipal)()
Dim claims As IEnumerable(Of Claim) = New List(Of Claim) ().AsEnumerable()
fackClaimPrinciple.Setup(Sub(e) e.Claims).Returns(claims)
fackClaimPrinciple.Setup(Function(p) p.IsInRole("Agent")).Returns(True)
Thread.CurrentPrincipal = fackClaimPrinciple.[Object]
// Act
Dim result = TestController.GetUserDetail()
End Sub