Je reçois cette erreur:
1) XTest::testX
array_merge(): Argument #1 is not an array
ERRORS!
Tests: 1, Assertions: 0, Errors: 1.
Sur ce cas de test:
use PHPUnit\Framework\TestCase;
class XTest extends TestCase
{
function __construct()
{}
function testX()
{
$this->assertTrue(true);
}
}
Si je supprime __construct
méthode, mes tests réussissent. Que se passe-t-il avec la gestion par PHPUnit de mes méthodes de constructeur de classe? Cela a bien fonctionné dans PHPUnit version 4.8, mais maintenant j'utilise PHPUnit version 6.1.3
PHPUnit utilise le constructeur pour l'initialisation de la base TestCase
Vous pouvez voir la méthode constructeur ici: https://github.com/sebastianbergmann/phpunit/blob/6.1.3/src/Framework/TestCase.php#L328
public function __construct($name = null, array $data = [], $dataName = '')
Vous ne devriez pas utiliser le constructeur, car il est utilisé par phpunit et toute modification de la signature, etc. peut casser les choses.
Vous pouvez utiliser les méthodes spéciales setUp
et setUpBeforeClass
que phpunit appellera pour vous.
use PHPUnit\Framework\TestCase;
class XTest extends TestCase
{
function static setUpBeforeClass()
{
// Called once just like normal constructor
// You can create database connections here etc
}
function setUp()
{
//Initialize the test case
//Called for every defined test
}
function testX()
{
$this->assertTrue(true);
}
// Clean up the test case, called for every defined test
public function tearDown() { }
// Clean up the whole test class
public static function tearDownAfterClass() { }
}
Les documents: https://phpunit.de/manual/current/en/fixtures.html
Notez que setUp
est appelé pour chaque test spécifié dans la classe.
Pour une seule initialisation, vous pouvez utiliser setUpBeforeClass
.
Et une autre astuce: exécutez votre phpunit avec le -v
drapeau pour afficher les traces de pile;)
Vous pouvez appeler parent::__construct();
dans votre classe Test:
public function __construct() {
parent::__construct();
// Your construct here
}
Ne fais pas ça. La réponse de Sander Visser est meilleure. Lisez sa réponse.