Comment l'unité de test de votre API?
J'en suis au point où j'ai besoin d'écrire des tests unitaires pour une API REST écrite à l'aide de CakePHP 1.3. L'API prend en charge GET, POST et de METTRE les requêtes d'interrogation et de manipulation de données.
Est-il de toute façon à tester la bonne entrée/sortie d'API simuler une requête HTTP à l'aide de luminaires? Je ne veux pas courir réelle de la POST/PUT demandes à l'encontre de la vivre (dev) de la base de données. Comment puis-je mieux se moquer du système à utiliser des modèles, mais de tester le reste de la pile en tant que-est?
Tests de requêtes GET est assez facile avec contrôleur de tests. Cependant, pour la manipulation de données de l'API utilise les en-têtes HTTP de manière assez approfondie et analyse également cru de XML et JSON POST/PUT données. Le contrôleur de l'unité méthodes d'essai seulement se moquer publier des données par la mise en $this->data
dans le contrôleur, ce qui ne me permet pas de tester correctement l'API.
- Si vous faites des tests presque l'ensemble de la pile à la fois, ce n'est pas vraiment une unité de test plus, est-il?
- Puis de nouveau, n'est-ce pas une demande d'API, tout comme un appel de fonction pour le client? Pourquoi ne pas tester ce tout?
- c'est juste une question mineure de la nomenclature. J'aurais appelé ce un test d'intégration, pas un test unitaire.
- Les tests de tout (c'est à dire: les tests d'intégration) est nécessaire, mais si c'est ta seule forme de test, vous aurez des problèmes isoler les erreurs. Les tests unitaires se concentre généralement sur de petites sections de code, avec l'intention de prouver qu'une section particulière est ce qu'il est prévu (ni plus, ni moins).
- Si le "tout pile" signifie serveur web (par exemple Apache) -> répartiteur (peut-être un PHP couche ou peut-être Apache réécriture d'URL) -> en arrière-plan, puis-je prendre, vous êtes à la recherche pour tester les couches séparément? J'aimerai trouver un bon moyen de développer et de gérer des tests pour le "dispatcher" les couche - je ne peux que penser à l'aide d'un client réel pour générer des demandes avec les en-têtes, etc. et puis utilisez un certain code supplémentaire dans le répartiteur de capturer tous les détails de tout ce qui vient de du serveur web et de générer automatiquement un appareil qui peut être utilisé pour la relecture de l'essai, sans que le client + serveur web. Que faites-vous maintenant?
Vous devez vous connecter pour publier un commentaire.
Je vous recommande de commencer avec un peu de recherche. Ces articles devraient vous aider:
Vous devez soit créer des objets fantaisie ou de l'utilisation de l'Isolement Cadre afin de simuler l'API de l'environnement. Les tests unitaires ne doivent pas dépendre des ressources comme des connexions internet, le réseau, les systèmes d'extrémité etc.
Si vous avez l'intention de test réel les appels d'API, vous devez créer d'essai d'intégration du projet et de l'utiliser à cette fin. Mais sachez que les tests d'intégration sont pas reproductibles et vous donnerait des résultats différents à chaque exécution.
Dirait que vous pourriez être en mesure de tester le XML brut, de vente et d'envoi de données sans trop de difficultés. Le CakePHP RESTE de la documentation dit ceci:
Essayez de marcher à travers votre code de contrôleur en mode debug pour voir ce qui arrive par
$this->data
lors d'une requête XML.Que pour éviter le live de la base de données, un SQLite en mémoire de la base de données de faire plus simple?
$this->data
directement jusqu'à un certain point, mais il ne me permet pas de tester l'ensemble de la demande d'API/cycle de réponse comme une seule unité.