J'ai créé des services POX en utilisant le kit de démarrage REST. Au début, c'était un peu compliqué de créer les tests unitaires pour la couche de service, mais à la fin, c'était bien conçu et j'ai réussi à tourner en dérision le contexte et à établir des attentes. Mais, je commence avec le côté client maintenant, et j'ai quelques problèmes pour trouver comment se moquer des choses. Ce n'est pas si simple. Donc, j'ai cette méthode exemple qui publie via HTTP des données en utilisant un contrat de données et XML en tant que transport.Comment tester un WCF client construit avec WCF Rest Starter Kit
public class ServiceClient: IService
{
private const string uri_template = "http://{0}:{1}/SomeService.svc/";
private readonly HttpClient http = new HttpClient();
public ServiceClient(string host, int port)
{
http.BaseAddress = new Uri(string.Format(uri_template , host, port));
}
public void Create(MyDataContract my_data_contract)
{
var content = HttpContentExtensions
.CreateDataContract(
my_data_contract,
Encoding.Default,
"text/xml",
null);
var response = http.Post("Create", content);
if (response.StatusCode != HttpStatusCode.Created) {
throw new Exception("something is not right");
}
}
}
Cette méthode fonctionne et affiche effectivement les données et la sérialisation correctement.
Ce que je veux faire est de le tester unitaire.
Mes questions sont les suivantes:
Comment puis-je faire des talons/se moque de HttpContextExtensions sachant qu'il ne met pas en œuvre une interface?
Et pour HttpClient? c'est pire car il est plein de méthodes d'extension définies ailleurs (Post et les méthodes similaires sont des extensions).
Dans 2. Je pense que je peux coller à « Envoyer » et il est surcharge, mais est alors le même problème que dans 1
Ce que je pensais faire, est d'extraire des interfaces pour HttpContextExtensions et HttpClient, crée un enfant pour chacun et implémente les interfaces déléguant au parent, puis utilise les interfaces dans mon code.
Mais c'est beaucoup de travail à mon humble avis. J'utilise RhinoMocks comme cadre de moquerie, donc je ne peux pas mock/stub classes concrètes, et je tiens à y adhérer, parce que je pense vraiment que les classes de béton moqueur n'est pas très élégant. Donc, y a-t-il une façon plus propre/plus rapide/plus intelligente de tester le code de test comme ci-dessus?
PD: Ceci est pour WCF Starter Kit aperçu 2
Peut-être que je peux ajouter une étape personnalisée comme suggéré par Pablo M. Cibraro ici: http: //weblogs.asp.net/cibrax/archive/2009/03/13/httpclient-dans-le-wcf-reste-starter-kit-preview-2.aspx –