У меня есть модульный тест для проверки обоих My.User.IsInRole () и ClaimsPrincipal в следующем контроллере.
Текущий принцип потока был назначен дважды, поэтому работает только второй ClaimPrincipal, как я могу сделать так, чтобы оба принципа работы работали?
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
пытается настроить макет в этом тестовом примере (код VB, C # тоже хорошо):
<TestMethod()>
Public Sub Test()
//Arrange
//Mock User.IsInRole():
Dim fakePrincipal = New Moq.Mock(Of IPrincipal)()
fakePrincipal.Setup(Function(p) p.IsInRole("Agent")).Returns(True)
Thread.CurrentPrincipal = fakePrincipal.[Object]
'Dim fakeClaimPrincipal = New Mock(Of ClaimsPrincipal)()
'Dim claims As IEnumerable(Of Claim) = New List(Of Claim) ().AsEnumerable()
'fakeClaimPrincipal.Setup(Sub(e) e.Claims).Returns(claims)
'Thread.CurrentPrincipal = fakeClaimPrincipal.[Object]
//Mocking is not working on ClaimsPrincipal.FindFirst(), so it's fixed
by using claim based function:
Thread.CurrentPrincipal = New TestPrincipal(New Claim(ClaimTypes.Name, "user@hotmail.com"))
Public Class TestPrincipal
Inherits ClaimsPrincipal
Public Sub New(ParamArray claims As Claim())
MyBase.New(New TestIdentity(claims))
End Sub
End Class
Public Class TestIdentity
Inherits ClaimsIdentity
Public Sub New(ParamArray claims As Claim())
MyBase.New(claims)
End Sub
End Class
// Act
Dim result = TestController.GetUserDetail()
End Sub
Итак, один из них - фиктивный принципал, другой - не фиктивный принципал, как мне назначить текущий поток?