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 code sont les grands absents de
> > > > > la doc pour le moment, mais vu que les tests �tait l'un des th�mes
> > > > > importants de la Cake fest et qu'ils semblent l'un des chantiers les
> > > > > plus actifs au sein de la core team, je pense que nous aurons
> > > > > prochainement des infos plus pr�cises...
>
> > > > > Je reviens � mes questions quand m�me :
>
> > > > > - si je souhaite faire g�n�rer des tests unitaires, il semble
> > > > > obligatoire d'avoir une base de test et de lui ins�rer les m�mes
> > > > > tables que dans la base "default", sinon deux probl�mes surviennent :
> > > > > 1) au lancement du test unitaire, il y a un gros warning qui me dit
> > > > > que la table "xyz_test" n'existe pas 2) au moment o� l'on lance le
> > > > > script Bake et que l'on dit vouloir travailler avec la base de test,
> > > > > il est impossible de g�n�rer quoi que ce soit si la base est vide !
>
> > > > > >>>> il est donc obligatoire d'avoir une base test et de la peupler 
> > > > > >>>> avec des tables pour profiter � la fois des tests unitaires et 
> > > > > >>>> de leur g�n�ration par le script Bake ?!
>
> > > > > - si je choisis ma base "test" dans le script Bake, que je g�n�re tout
> > > > > le code de base d'une application (mod�les et contr�leurs), Cake
> > > > > �crit : $useDbConfig = 'test' dans l'ent�te des classes, donc ma
> > > > > question : doit-on repasser partout pour remplacer "test" par
> > > > > "default" lorsque la phase de test est termin�e ? ou bien doit-on
> > > > > refaire toute la g�n�ration de code en indiquant cette fois au script
> > > > > Bake que l'on utilise la base "default" ?
>
> > > > > J'esp�re que cela sera plus clair...
>
> > > > > @ +
>
> > > > > Avairet
>
> > > > > On 13 f�v, 23:18, esion <[EMAIL PROTECTED]> wrote:
>
> > > > > > J'avais lanc� ce sujet 
> > > > > > :http://groups.google.fr/group/cakephp-fr/browse_thread/thread/ea2641e...
>
> > > > > > J'ai quelque chose de plus ou moins fonctionnel et je dois dire que
> > > > > > c'est loin d'�tre �vident. Et le tuto du bakery ne parle que du test
> > > > > > de models et pas des controllers.
>
> > > > > > 1) Apparement peu importe la base de donn�es que tu choisis, 
> > > > > > lorsqu'un
> > > > > > test est lanc� avec des fixtures celui-ci recreer les tables avec le
>
> ...
>
> read more »
--~--~---------~--~----~------------~-------~--~----~

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 à