Mise à jour solution complète:Test Unit - Comment définir l'utilisateur du contrôleur pour objet principal générique
méthode WebAPI contrôleur que je vais tester:
using Microsoft.AspNet.Identity;
using System.Web.Http;
[Authorize]
public class GigsController : ApiController
{
private readonly IUnitOfWork _unitOfWork;
public GigsController(IUnitOfWork unitOfWork)
{
_unitOfWork = unitOfWork;
}
[HttpDelete]
public IHttpActionResult Cancel(int id)
{
var userId = User.Identity.GetUserId();
var gig = _unitOfWork.Gigs.GetGigWithAttendees(id);
if (gig.IsCanceled)
return NotFound();
if (gig.ArtistId != userId)
return Unauthorized();
gig.Cancel();
_unitOfWork.Complete();
return Ok();
}
}
Unité classe Test:
[TestClass]
public class GigsControllerTests
{
private GigsController _controller;
public GigsControllerTests()
{
var identity = new GenericIdentity("[email protected]");
identity.AddClaim(
new Claim("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name", "[email protected]"));
identity.AddClaim(
new Claim("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier", "1"));
var principal = new GenericPrincipal(identity, null);
var mockUoW = new Mock<IUnitOfWork>();
_controller = new GigsController(mockUoW.Object);
_controller.User = principal;
}
Je reçois l'erreur suivante:
Erreur CS0200 propriété ou indexeur 'ApiController.User' ne peuvent pas être attribués à - il est en lecture seule
https://i.stack.imgur.com/YDQJS.png
C'est incorrect. ['ApiController.User'] (https://msdn.microsoft.com/en-us/library/system.web.http.apicontroller.user (v = vs.118) .aspx) n'est pas en lecture seule. Vous devez donc fournir un [mcve] qui peut être utilisé pour reproduire le problème. De cette façon, nous pouvons mieux évaluer la véritable cause du problème. – Nkosi
Salut Nkosi, J'ai mis à jour la solution complète, Il montre toujours que l'ApiController.User est en lecture seule – Arjuna
Afficher aussi la déclaration 'GigsController'. – Nkosi