On Feb 15, 11:26 am, avairet <[EMAIL PROTECTED]> wrote:
> 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 !

Je viens juste de commencer les tests avec cake et j ai bien la meme
impression

>
> 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...
>
C est pour cela que l on ajoute au fichier bake généré par bake la
classe moisie

//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

}

C moche mais ca permet de ne pas détruire ton vrai model.

> 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...
>
En fonction de ta methode pour importer les fixtures ca marche plus ou
moins bien . C pour ca que j ai rajouté $useTable dans UserTest.

> 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 !

La normalement tout fonctionne bien ... il cree les tables ajoutes les
données, effectue les tests unitaires et vide tout une fois terminé.

>
> Je précise que mes fichiers de tests sont ceux générés par le script
> Bake...
>
De mon point de vue il faut le tuner un peu ton fichier généré par
bake pour qu il fonctionne  (au moins classe UserTest) pour qu il
marche. Apres les fixtures c est une autre histoire.

euphrate_ylb

> 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(
>
> ...
>
> 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 à