2010-06-15 4 views
0

Je plonge dans le monde des tests unitaires. Et je suis en quelque sorte perdu. J'ai appris aujourd'hui que les tests unitaires testent si une fonction fonctionne.À propos de l'unité de test d'une fonction dans le cadre zend et les tests unitaires en général

Je voulais tester la fonction suivante:

public function getEventById($id) 
{ 
    return $this->getResource('Event')->getEventById($id); 
} 

Je voulais donc tester cette fonction comme suit:

public function test_Event_Get_Event_By_Id_Returns_Event_Item() 
{ 
    $p = $this->_model->getEventById(42); 
    $this->assertEquals(42, EventManager_Resource_Event_Item_Interface); 
    $this->assertType('EventManager_Resource_Event_Item_Interface', $p); 
} 

Mais j'ai eu l'erreur:

1) EventTest::test_Event_Get_Event_By_Id_Returns_Event_Item 
Zend_Db_Table_Exception: No adapter found for EventManager_Resource_Event 

/home/user/Public/ZendFramework-1.10.1/library/SF/Model/Abstract.php:101 
/var/www/nrka2/application/modules/eventManager/models/Event.php:25 

Mais quelqu'un m'a dit que je faisais actuellement des tests unitaires et que je ne faisais pas de test d'intégration. J'ai donc pensé que je devais tester la fonction getEventById différemment. Mais je ne comprends pas comment. Qu'est-ce que cette fonction cals juste une ressource et renvoie l'événement par ID.

Répondre

3

Eh bien, un moyen consiste à surcharger l'objet que vous testez. Ensuite, vous pouvez remplacer la méthode getResource() pour renvoyer un objet "Mock" (qui se comporte toujours de façon déterministe et que vous pouvez "configurer" pour chaque test). L'astuce consiste à isoler la fonctionnalité que vous voulez tester, et à supprimer toutes les dépendances qui peuvent gêner (la méthode getResource dans votre cas) ...

Je vous recommande de lire quelques tutoriels (pas seulement un, quelques-uns), et en essayant de comprendre la philosophie ainsi que la méthodologie ...

quelques tutoriels:

Zend Developer Zone

PHP Unit Slideshow

Pragmatic Unit Testing (Note, ceci est pour C#, mais les concepts doivent être les mêmes)

DevShed

+0

Merci pour toutes les informations. J'ai tellement besoin de beaucoup de lecture! – sanders