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?
InformationsquelleAutor deceze | 2010-06-28