Utilisateur de PHPUnit depuis peu, je me lance progressivement dans l'apprentissage des différentes ficelles de cet outil fort sympathique et je fais face à un petit problème qui ne semble pas venir de mon application.
Petit problème qui consiste juste à faire une assertion de contenu de la propriété content de ma classe Textarea.

Vous l'aurez bien compris, je suis en plein écriture de tests unitaires pour MyOOF dans l'optique de poursuivre son développement en PHP 5.3. Petit développement qui risque de s'annoncer bien agréable à entreprendre puisque je n'ai envie que d'une chose : découvrir mais surtout mettre en application des nouveautés de PHP 5.3.

Je suis donc en train de rédiger le test unitaire de la classe Textarea que voici (après suppression de tous les autres tests inutiles à la découverte de mon problème) :

<?php
// TextareaTest.php
PHPUnit_Util_Filter::addFileToFilter(__FILE__);
require_once __DIR__ . '/loader.php';
 
class TextareaTest extends PHPUnit_Framework_TestCase
{
    private $_textarea;
    private $_clone;
 
    protected function setUp()
    {
        $this->_textarea = new Textarea(array(
            'name'      => 'foobar',
            'xml:lang'  => 'fr-FR',
            'id'        => 'txt',
            'rows'      => 12,
            'style'     => 'border: 2px red dotted;'
        ), 'empty');
    }
 
    // ...
 
    public function testTextareaSetContentSucceed()
    {
        $this->assertSame($this->_textarea, $this->_textarea->setContent('MyOOF'));
    }
 
    public function testTextareaGetContentSucceed()
    {
        $this->assertEquals('MyOOF', $this->_textarea->getContent());
    }
 
    public function testTextareaUnsetContentSucceed()
    {
        $this->assertSame($this->_textarea, $this->_textarea->unsetContent());
        $this->assertClassHasAttribute('content', 'Textarea');
        $this->assertEquals('', $this->_textarea->content);
    }
 
    // ...
 
    public function tearDown()
    {
        unset($this->_textarea);
        unset($this->_clone);
    }
}

J'éxécute donc mon test et voici ce que celui-ci me sort au lieu de passer :

/htdocs/.../myoof_current/tests% phpunit TextareaTest.php
PHPUnit 3.4.3 by Sebastian Bergmann.

.F.

Time: 0 seconds

There was 1 failure:

1) TextareaTest::testTextareaGetContentSucceed
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-MyOOF
+empty


FAILURES!
Tests: 3, Assertions: 5, Failures: 1.
zsh: exit 1     phpunit TextareaTest.php
/htdocs/.../myoof_current/tests%

Ajoutons maintenant quelques var_dump() aux bons endroits :

<?php
// TextareaTest.php
PHPUnit_Util_Filter::addFileToFilter(__FILE__);
require_once __DIR__ . '/loader.php';
 
class TextareaTest extends PHPUnit_Framework_TestCase
{
    private $_textarea;
    private $_clone;
 
    protected function setUp()
    {
        $this->_textarea = new Textarea(array(
            'name'      => 'foobar',
            'xml:lang'  => 'fr-FR',
            'id'        => 'txt',
            'rows'      => 12,
            'style'     => 'border: 2px red dotted;'
        ), 'empty');
    }
 
    // ...
 
    public function testTextareaSetContentSucceed()
    {
        var_dump($this->_textarea->getContent());
        $this->assertSame($this->_textarea, $this->_textarea->setContent('MyOOF'));
        var_dump($this->_textarea->getContent());
    }
 
    public function testTextareaGetContentSucceed()
    {
        var_dump($this->_textarea->getContent());
        $this->assertEquals('MyOOF', $this->_textarea->getContent());
    }
 
    public function testTextareaUnsetContentSucceed()
    {
        $this->assertSame($this->_textarea, $this->_textarea->unsetContent());
        $this->assertClassHasAttribute('content', 'Textarea');
        $this->assertEquals('', $this->_textarea->content);
    }
 
    // ...
 
    public function tearDown()
    {
        unset($this->_textarea);
        unset($this->_clone);
    }
}

Nous sommes d'accord que les var_dump() devraient nous sortir successivement les outputs suivants :

string(5) "empty"
string(5) "MyOOF"
string(5) "MyOOF"

Observons :

/htdocs/.../myoof_current/tests% phpunit TextareaTest.php
PHPUnit 3.4.3 by Sebastian Bergmann.

string(5) "empty"
string(5) "MyOOF"
.string(5) "empty"
F.

Time: 0 seconds

There was 1 failure:

1) TextareaTest::testTextareaGetContentSucceed
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-MyOOF
+empty


FAILURES!
Tests: 3, Assertions: 5, Failures: 1.
zsh: exit 1     phpunit TextareaTest.php
/htdocs/.../myoof_current/tests%

Quel est le soucis ? Est-ce que je m'y prends mal avec PHPUnit ou alors est-ce un problème du framework ? Un soucis de cache d'Op-code sachant qu'APC et eAccelerator sont down ?

Si vous avez une petite idée, n'hésitez pas... il est tard et je suis fatigué donc il se peut qu'un détail me soit échappé.
Merci.


Joris Berthelot