PHPUnit 6.1.x throws array_merge () error when my test class uses its own constructor method

I get this error:

1) XTest::testX array_merge(): Argument #1 is not an array ERRORS! Tests: 1, Assertions: 0, Errors: 1. 

In this test case:

 use PHPUnit\Framework\TestCase; class XTest extends TestCase { function __construct() {} function testX() { $this->assertTrue(true); } } 

If I remove the __construct method, my tests will pass. What happens with the handling of PHPUnit methods of my class? It worked fine in PHPUnit version 4.8, but now I am using PHPUnit version 6.1.3

+16
constructor php extends phpunit
source share
2 answers

PHPUnit uses a constructor to initialize a basic TestCase

You can see the constructor method here: https://github.com/sebastianbergmann/phpunit/blob/6.1.3/src/Framework/TestCase.php#L328

 public function __construct($name = null, array $data = [], $dataName = '') 

You should not use the constructor because it is used by phpunit and any signature changes, etc. They can break things.

You can use special setUp and setUpBeforeClass which phpunit will call for you.

 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() { } } 

Docs: https://phpunit.de/manual/current/en/fixtures.html.

Note that setUp for each specified test in the class.

For a single initialization, you can use setUpBeforeClass .

And one more tip: run your phpunit with the -v flag to display stack traces;)

+28
source share

You can call parent::__construct(); in your test class:

 public function __construct() { parent::__construct(); // Your construct here } 

Edit 2019

Do not do this. Sander Visser answer is better. Read his answer.

+10
source share

All Articles