Ich versuche, die User.Identity in meinem Api-Controller-Test zu verspotten.Unit Test Web Api 2 Mock Benutzer
Das ist mein api Methode:
[Route(Urls.CustInfo.GetCustomerManagers)]
public HttpResponseMessage GetCustomerManagers([FromUri]int groupId = -1)
{
var user = User.Identity.Name;
if (IsStaff(user) && groupId == -1)
{
return ErrorMissingQueryStringParameter;
}
...
}
Ich folgte dem Vorschlag in diesem Beitrag: Set User property for an ApiController in Unit Test die User-Eigenschaft einzustellen.
Dies ist mein Test:
[TestMethod]
public void User_Without_Group_Level_Access_Call_GetCustomerManagers_Should_Fail()
{
Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("Bob", "Passport"), new[] {"managers"});
var response = m_controller.GetCustomerManagers();
Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode);
}
Aber wenn der Test durchgeführt wird, ist die User-Eigenschaft immer null.
Ich habe sogar versucht, die Zeile für die Einstellung der CurrentPrincipal in die API-Methode kurz vor dem Aufruf von User.Identity zu verschieben, aber es ist immer noch null.
Was mache ich falsch? Wenn dieser Ansatz für Web API 2 nicht funktioniert, was ist der beste Weg, um die Benutzereigenschaft zu simulieren?
Danke!
Nachdem der Principal auf diese Weise festgelegt wurde, ist die UserId nicht festgelegt. Ich brauche es einzustellen, weil die Logik in meinem System-zu-Test auf der Benutzer-ID basiert. Z.B. 'User.Identity.Name' ist gefüllt (" Bob "), aber nicht" User.Identity.GetUserId() ". – Bart
@Bart hast du das jemals gelöst? –
@Ben Hall Es ist schon eine Weile her, aber ich glaube nicht, dass ich es getan habe. Ich denke, meine Problemumgehung bestand nur darin, die Logik zu ändern, um 'UserName' anstelle von' UserId' zu verwenden. – Bart