user1783931
user1783931

Reputation: 173

PHPUnit test suite include path

Using phpunit and I am having some trouble with include paths, not for phpunit itself, but for my code and tests directory.

I have the following code structure:

Application
  -StringCalculator.php

tests
  -StringCalculatorTest.php

Inside my StringCalculatorTest.php i have a require statement:

require_once('../StringCalculator.php');

Running phpunit StringCalculatorTest.php from inside the tests folder works perfectly.

However, when i then introduce a phpunit.xml configuration file in the root directory i.e.

Application
  -StringCalculator.php

tests
  -StringCalculatorTest.php

phpunit.xml

the include path is screwed. I have to replace the require_once to

require_once('StringCalculator.php');

What is the correct way to set include paths between the application and the test directory?

Upvotes: 13

Views: 15861

Answers (3)

slashingweapon
slashingweapon

Reputation: 11307

The best place to set your PHP include path is in your bootstrap file. Usually, your phpunit.xml file will include a bootstrap attribute:

<phpunit backupGlobals="true"
     backupStaticAttributes="false"
     bootstrap="bootstrap.php"
     cacheTokens="true"
     colors="true"
     ... and so on ...
</phpunit>

Then in your bootstrap file you can set include paths, include important files, etc..

set_include_path(get_include_path() . PATH_SEPARATOR . '../my/sources');

The config file is covered in Appendix C of the PHPunit docs.

EDIT: Link updated

Upvotes: 11

slier
slier

Reputation: 6740

I know the question already been answer
This answer is for future visitor

According to phpunit documentation, u can use includePath directive in your phpunit.xml for your inclusion path

<php>
  <includePath>/path/to/ur/project</includePath>
</php>

Upvotes: 9

Matthieu Napoli
Matthieu Napoli

Reputation: 49553

First, I don't get how require_once('../StringCalculator.php'); works, it should rather be: require_once('../Application/StringCalculator.php');.

Then, slashingweapon answer is good and it's the best IMO, however if you don't want that much trouble, you can specify your require_once to start from the directory of the current file:

require_once(__DIR__ . '../Application/StringCalculator.php');

Upvotes: 3

Related Questions