Bravo à vous deux pour cette plongée dans les test unitaires, mais
vous êtes allés bien plus loin que moi et vos exemples dépassent de
loin mes interrogations !

@esion :

1) tu dis "En fait, il n'y a pas à s'embêter : le testsuite de cake
fait presque
tout, tout seul."

>>> Ben non, justement, le test suite ne fait pas tout tout seul... ou plutôt 
>>> il le fait mal !


2) "tu spécifies seulement que tu veux utiliser la base de données de
test : $useDbConfig = 'test'
Cette base est accéssible et vide !"

>>> Je suis désolé, mais si je précise "$useDbConfig" dans mes modèles, je vais 
>>> bien devoir y repasser pour le supprimer lorsque je voudrais utiliser ma 
>>> base par défaut ! Or le script Bake écrit bien cela dans tous les modèles, 
>>> quand on lui dit d'utiliser "test" comme DbConfig...

3) "Si tu obtiens un message d'erreur ("xyz_test n'existe pas") c'est
seulement un problème de convention de nommage, test suite est très
pointilleux et l'exemple du bakery n'a pas l'air de fonctionner tel
quel. "

>>> toutes mes tables respectent la convention de nommage et comme je fais 
>>> générer mes modèles et contrôleurs de base par le script Bake, ils 
>>> respectent eux aussi les conventions...


4) Lorsque user.test.php est lancé
1- la classe UserTestCase est chargée
2- fixtures est spécifié : la table `test_suite_users` est créée dans
la base de test (automagiquement, enfin je pense)

>>> Et ben non, justement, la table n'est pas créée automagiquement si la base 
>>> test ne contient rien au départ !
Je précise que mes fichiers de tests sont ceux générés par le script
Bake...




On 15 fév, 10:58, esion <[EMAIL PROTECTED]> wrote:
> Okay,
> Si je peux me permettre, dans ce cas tu peux aussi définir un nouveau
> test pour avoir plus de précision sur l'origine d'une erreur :
>
> [...]
> function validTest(){
>       $result = true;
>       $this->assertTrue($result);
>
> }
>
> function invalidTest(){
>      $result = true;
>      $this->assertFalse($result);}
>
> [...]
>
> Le message d'erreur est le suivant :
> Fail:[...]user.test.php -> UserTestCase -> invalidTest -> Expected
> false, got [Boolean: true] at [[...]user.test.php line 58]
>
> Je viens d'essayer un autre aspect de testsuite qui conviendrait aux
> tests de scénario. Dans nos exemples on avait un résultat du type
> 1/1 test cases complete: 5 passes, 0 fails and 0 exceptions.
> Ce qui signifie que les 5 méthodes du cas de test présent sont
> valides.
>
> On pourrait alors rajouter des cas de tests, mais ça n'a pas l'air de
> fonctionner.
> J'ai essayé quelque chose comme ça :
>
> //file : user.test.php
>  App::import('Model', 'User');
>
> class UserTest extends User {
>
>         var $name = 'User'; //Définition des objets avec le nom
> d'origine
>         var $useDbConfig = 'test'; //Spécification de la base de
> données à
> utiliser
>
> }
>
> class TestACase extends CakeTestCase {
>         var $fixtures = array('user');
>
>         function startCase(){
>                  $this->TestObject = new UserTest();
>         }
>         function endCase(){
>                  unset($this->TestObject();
>         }
>
>         function validTest() {
>                  $this->assetTrue(true);
>         }
>
> }
>
> class TestBCase extends CakeTestCase {
>         var $fixtures = array('user');
>
>         function startCase(){
>                  $this->TestObject = new UserTest();
>         }
>         function endCase(){
>                  unset($this->TestObject();
>         }
>
>         function invalidTest() {
>                  $this->assetTrue(false);
>         }
>
> }
>
> Le résultat :
> 2/2 test cases complete: 1 passes, 0 fails and 0 exceptions.
> En principe, il devrait y avoir "1 fails".
>
> On Feb 15, 9:48 am, euphrate_ylb <[EMAIL PROTECTED]> wrote:
>
> > Je voulais avoir un test raté et un qui fonctionne. Donc de ce point
> > de vue, ca marche parfaitement.
>
> > Pour le useTable je pense que ca vient effectivement de la facon de
> > faire l import (import des données). De nombreuses personnes utilisant
> > la meme methode ont eu le meme probleme que le mien.
>
> > esion wrote:
> > > function testMe() {
> > >                 $result = $this->TestObject->findAll();
> > >                 debug($result);
> > >                 $expected = 1;
> > >                 $this->assertEqual($result, $expected);
> > >                 [...]
> > > �a je vois pas trop comment �a peut fonctionner sur un findAll. Serait-
> > > ce un oubli?
>
> > > Je n'ai pas eu besoin de sp�cifier $useTable, la requ�te execut� :
> > > SELECT `User`.`id`, `User`.`username` FROM `test_suite_users` AS
> > > `User` WHERE 1 = 1
>
> > > Est-ce que c'est d� � tes fixtures et essentiellement la ligne
> > > import :
> > >   var $import = 'array('table' => 'users', 'records' => true);
> > > ?
>
> > > On Feb 14, 11:59 pm, euphrate_ylb <[EMAIL PROTECTED]> wrote:
> > > > Pour faire marcher ce test simple, j'ai principalement du lutter pour
> > > > trouver les deux astuces suivantes:
> > > > 1.  d�finir dans UserTest l'attribut useTable (sinon il cherche la
> > > > table users et pas user_tests)
> > > > 2. ne pas utiliser setUp et TearDown mais preferer startCase()
> > > > endCase()
>
> > > > Bref merci bake pour ton travail a moitie fonctionnel!!
>
> > > > Ce qui donne :
>
> > > > // File fixture
> > > > class UserTestFixture extends CakeTestFixture {
> > > >     var $name = 'UserTest';
> > > >     var $import = 'array('table' => 'users', 'records' => true);
>
> > > > }
>
> > > > // File test
> > > > class UserTest extends User {
> > > >     var $name = 'UserTest';
> > > >     var $useDbConfig = 'test_suite';
>
> > > >     var $useTable = 'user_tests';
>
> > > > }
>
> > > > class UserTestCase extends CakeTestCase {
> > > >         var $TestObject = null;
>
> > > >         var $fixtures = array( 'user_test' );
>
> > > >         function startCase() {
> > > >                 $this->TestObject = new UserTest();
> > > >         }
>
> > > >         function endCase() {
> > > >                 unset($this->TestObject);
> > > >         }
>
> > > >         function testMe() {
> > > >                 $result = $this->TestObject->findAll();
> > > >                 debug($result);
> > > >                 $expected = 1;
> > > >                 $this->assertEqual($result, $expected);
>
> > > >                 $this->assertTrue($this->TestObject->save(
> > > >                         array(
> > > >                                 'UserTest' => array(
> > > >                                         'login'=>    'XXXXXXXXXXXXXXX',
> > > >                                         'password' =>        
> > > > 'CCCCCCCCCCCCCCC',
> > > >                                         'created'=>  '2008-01-27 
> > > > 03:56:13',
> > > >                                         'modified'=> '2008-01-27 
> > > > 03:56:13'
> > > >                                 )
> > > >                         )
> > > >                 ));
> > > >         }
>
> > > > }
>
> > > > On Feb 14, 4:11 pm, esion <[EMAIL PROTECTED]> wrote:
>
> > > > > Je me suis remis aux tests unitaires aujourd'hui je te mets le code
> > > > > d'un test de m�thode �l�mentaire (Model::findAll() ) je l'esp�re de la
> > > > > mani�re la plus claire possible.
>
> > > > > ################################
> > > > > ##On considere la configuration suivante :
>
> > > > > CREATE TABLE `users` (
> > > > >   `id` int(10) NOT NULL auto_increment,
> > > > >   `username` varchar(40) NOT NULL,
> > > > >   `password` varchar(40) NOT NULL,
> > > > >   `email` varchar(255) NOT NULL,
> > > > > )
>
> > > > > Le model user
> > > > > //FILE : app/models/user.php
> > > > > class User extends AppModel {
> > > > >         var $name = 'User';
>
> > > > > }
>
> > > > > ######################
> > > > > ## Cr�ation des donn�es de tests : fixtures
>
> > > > > //FILE : app/tests/fixtures/user_fixtures.php
> > > > > class UserFixture extends CakeTestFixture {
> > > > >         var $name = 'User';
> > > > >         var $import = 'User'; //import du schema de la table
>
> > > > >         var $records = array(
> > > > >                 array('id' => 1, 'username' => 'admin', 'password' =>
> > > > > '4308fb05a903a6c0add7534f3f73bee25ec16f3d' /*sha1+salt = admin*/,
> > > > > 'email' => '[EMAIL PROTECTED]'),
> > > > >                 array('id' => 2, 'username' => 'esion', 'password' => 
> > > > > 'esion',
> > > > > 'email' => '[EMAIL PROTECTED]'),
> > > > >                 array('id' => 4, 'username' => 'user', 'password' => 
> > > > > 'user', 'email'
> > > > > => '[EMAIL PROTECTED]'),
> > > > >                 );
>
> > > > > }
>
> > > > > ######################
> > > > > ## Test du Model
>
> > > > > //FILE : app/tests/cases/models/user.test.php
> > > > > App::import('Model', 'User'); //Import du model
>
> > > > > class UserTest extends User { //surcharge du model
>
> > > > >         var $name = 'User'; //D�finition des objets avec le nom 
> > > > > d'origine
> > > > >         var $useDbConfig = 'test'; //Sp�cification de la base de 
> > > > > donn�es �
> > > > > utiliser
>
> > > > > }
>
> > > > > class UserTestCase extends CakeTestCase {
> > > > >         var $fixtures = array('user'); //Appel des enregistrements : 
> > > > > la table
> > > > > de test poss�de maintenant des enregistrements.
>
> > > > >         function testFindAll() { //test d'une m�thode par d�faut du 
> > > > > model
> > > > >                 $this->TestObject =& new UserTest(); //Chargement du 
> > > > > model
> > > > >                 $this->TestObject->recursive = 0;
> > > > >                 $result = $this->TestObject->findAll(array(), 
> > > > > array('id',
> > > > > 'username')); //lancement de la m�thode
> > > > >                 //debug($result);
> > > > >                 $expected = array(
> > > > >                                                 array('User' => 
> > > > > array('id' => 1, 'username' => 'admin')),
> > > > >                                                 array('User' => 
> > > > > array('id' => 2, 'username' => 'esion')),
> > > > >                                                 array('User' => 
> > > > > array('id' => 4, 'username' => 'user'))
> > > > >                                                 );
> > > > >                 $this->assertEqual($result, $expected); 
> > > > > //v�rification des r�sultats
> > > > >         }
>
> > > > > }
>
> > > > > #####################
> > > > > ## D�roulement du test :
>
> > > > > Lorsque user.test.php est lanc�
> > > > > 1- la classe UserTestCase est charg�e
> > > > > 2- fixtures est sp�cifi� : la table `test_suite_users` est cr��e dans
> > > > > la base de test (automagiquement, enfin je pense)
> > > > > 3- la m�thode testFindAll() est lanc�e
> > > > > 4- L'objet testObject est cr��
> > > > > 5- la m�thode findAll de testObject est lanc� et retourne les
> > > > > enregistrements (fixtures)
> > > > > 6- assert test le r�sultat
> > > > > 7- l'objet est d�truit ainsi que la table avec les enregistrements
> > > > > (automagiquements).
>
> > > > > ##################
> > > > > ## Note :
> > > > > - Apparement les m�thodes setUp et TearDown g�n�r�s par bake pose des
> > > > > probl�mes pour l'appel de la classe UserTest
> > > > > - Je me trompe peut �tre (surement) sur le d�roulement du test.
>
> > > > > ## hf
>
> > > > > On 14 f�v, 14:35, avairet <[EMAIL PROTECTED]> wrote:
>
> > > > > > Merci � tous les deux pour vos r�ponses, mais cela ne correspond 
> > > > > > pas �
> > > > > > mes questions...
> > > > > > C'est sans doute que je me suis mal exprim�.
>
> > > > > > @euphrate : le tuto dans la Bakery date un peu et n'aborde pas les
> > > > > > tests unitaires g�n�r�s par le script Bake
>
> > > > > > @esion : oui j'avais lu ta discussion, tr�s int�ressante, mais
> > > > > > malheuresuement rest�e sans v�ritable �mulation et rebonds
>
> > > > > > En fait le testing et la g�n�ration de
>
> ...
>
> plus de détails »
--~--~---------~--~----~------------~-------~--~----~

Groupe "Cakephp-fr".
Adresse : [email protected]
Pour résilier  : [EMAIL PROTECTED]
Pour les options : http://groups.google.com/group/cakephp-fr?hl=fr
-~----------~----~----~----~------~----~------~--~---

Répondre à