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 ;)
parent::__construct();
? The signature can be found here github.com/sebastianbergmann/phpunit/blob/6.1.3/src/Framework/… – Inkberryparent::__construct();
– RoussillonsetUp()
methods for initialization. Further more you can get a stacktrace when your run phpunit with the-v
verbose flag. – InkberrysetUp()
for initialization? Sometimes I have classes that use__construct()
method legitimately. How would you usesetUp
on them?... – RoussillonsetUp
is automatically called by phpunit after your constructor is called. You can find more information about other method here : phpunit.de/manual/current/en/fixtures.html – Inkberry__constructor
to saysetUp
for any initialization tasks, although in my case I need to initialize it once per class, whilesetUp
does it once per test case – RoussillonsetUpBeforeClass
which is called really once.setUp
is called for every specified test in your class. – Inkberry-v
option did not uncover any more info in my case, it gave the same error message, and i.e. did not give me the offending line where it crashed. I had to sleuth this one out. I am curious though that if I useparent::__construct()
, still without any parameters, it did work fine – Roussillon$this->data = []
– Inkberry__construct()
in aTestCase
. UsesetUp()
for initialization. It is invoked before each test. – Impish