PHPUnit 6.1.x throws array_merge() error when my test class uses its own constructor method
constructor, extends, php, phpunit
Solution
PHPUnit uses the constructor for initialization of the base `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 shouldn't use the constructor, because it's used by phpunit and any change to the signature etc can break things.
You can use the special `setUp` and `setUpBeforeClass` methods 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() { }
}
The docs: https://phpunit.de/manual/current/en/fixtures.html
Note that the `setUp` gets called for every specified test in the class.
For a single initialization you can use `setUpBeforeClass`.
And another tip: run your phpunit with the `-v` flag to display stack traces ;)
Problem
I get this error: ``` 1) XTest::testX array_merge(): Argument #1 is not an array ERRORS! Tests: 1, Assertions: 0, Errors: 1. ``` On this test case: ``` use PHPUnit\Framework\TestCase; class XTest extends TestCase { function __construct() {} function testX() { $this->assertTrue(true); } } ``` If I remove `__construct` method, my tests pass. What is going on with PHPUnit's handling of my class constructor methods? It worked fine in PHPUnit version 4.8, but now I am using PHPUnit version 6.1.3