J'ai créé ici le début d'une solution REST que j'ai codée en premier, car j'ai des problèmes pour tester le service REST. C'est mon premier coup à un service de repos alors excuses si quelque chose est gravement offensant.Unit Test Service .NET REST?
En un mot j'ai une classe concrète de manutention des travaux de service:
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class ESIID : BaseREST<ESI>
{
[OperationContract]
[WebGet(UriTemplate = "/{guid}/{id}", ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Wrapped)]
public Message LookupESIID(string guid, string id)
{
ResponseType = ResponseTypes.Json;
return GetById(guid, id);
}
private Message GetById(string guid, string id)
{
bllSvc = new Business.Services.TXESIIDRepository(guid);
var results = bllSvc.ByID(id);
return results.Count == 0 ? NoResults() : FormatResponse(results);
}
}
qui hérite d'une base (certaines méthodes inclus pour le contexte):
public abstract class BaseREST<T>
{
protected ResponseTypes ResponseType { get; set; }
public Message ReturnJson(string json)
{
var webContext = WebOperationContext.Current;
webContext.StatusCode = HttpStatusCode.OK;
return webContext.CreateJsonResponse(json);
}
public Message FormatResponse(List<T> results)
{
switch (ResponseType)
{
case ResponseTypes.Json:
return ReturnJson(JsonConvert.SerializeObject(results));
break;
case ResponseTypes.Xml:
return ReturnXml(results);
break;
default:
return ReturnErrorJson(new Error{ErrorDescription = "Format error", ErrorDetail = "Requested format is not valid", StatusCode = HttpStatusCode.BadRequest});
}
}
public Message NoResults()
{
var err = new Error
{
ErrorDescription = ConfigurationManager.AppSettings["NotFound_Descr"]
, ErrorDetail = ConfigurationManager.AppSettings["NotFound_Detail"]
, StatusCode = HttpStatusCode.BadRequest
};
return ReturnError(err);
}
}
I Je ne sais pas comment tester correctement l'implémentation et la classe de base. Est-il possible (et franchement bon) de créer un type de client HTTP mocké dans la configuration de test qui définirait alors l'URI? Je ne peux pas imaginer comment rendre ces classes flexibles pour les tests unitaires ET d'intégration.
Merci pour toute direction à ce sujet.
Merci, cela m'a indiqué dans la bonne direction. J'ai regardé dans WCFMock et cela semble être la voie à suivre avec l'extension du couplage WebContext cuit. À votre santé. – BryanGrimes