Stephenloky
Stephenloky

Reputation: 413

PHPUnit in a legacy environment

I'm starting to setup PHPUnit (v4.8) to be used in my 'legacy' code (it's not so legacy, but it have bad programming practices).

The structure of my folders is as follows

/home
  -phpunit.xml
  /folder1
  /folder2
  /folder3
  /vendor
  /tests
   -Test1.php
  /includes
   -functions.php
   /libs
    -User.php
    -TableClass.php
    ....

functions.php

<?php //require_once $_SERVER['DOCUMENT_ROOT'] . "/home/vendor/autoload.php" ; require_once $_SERVER['DOCUMENT_ROOT'] . "/home/includes/libs/table_classes/User.php" ; ?>

I have commented that line, because I think composer automatically loads it. Question 1, Am I Rigth? (because phpunit get automatically recognized inside my Test class...)

Test1.php

<?php

class Test1 extends PHPUnit_Framework_TestCase
{
  public function testSomething()
  {
    // $something = getColNameByStatusId(1);
    $this->assertEquals(1,2);
  }
}
?>

phpunit.xml

<phpunit bootstrap="includes/functions.php" colors="true">
    <testsuite name="Test1" >
        <directory>./tests</directory>
    </testsuite>
</phpunit>

Then I Execute phpunit in command line

My functions.php works fine in my code, of course with no composer integration, but when It's loaded with phpunit it 'breaks', I get the following error:

Warning: require_once(/home/includes/libs/table_classes/User.php): failed to open stream: No such file or directory in C:\wamp\www\home\includes\functions.php on line 18

I think I'm missing the 'loading' stuff for phpunit. My code doesn't use namespaces and PSR-0 neither PSR-4.

Question 2- How to properly load files in this case?

My goal is to load functions.php then it will load all other 'table' classes for doing my tests

Upvotes: 0

Views: 267

Answers (2)

Long TRAN
Long TRAN

Reputation: 131

I think it is better to start using PHPUnit by running

phpunit --generate-configuration

and follow some simple questions.

To autoload 'functions.php' and other table 'classes', you may try via composer.json autoload.

"autoload": {
  "psr-4": {
    "Model\\": "libs/"
  }
}

Here is the link with autoload for your reference.

Upvotes: 0

Stephenloky
Stephenloky

Reputation: 413

Replace $_SERVER['DOCUMENT_ROOT'] with __DIR__ and adjusted the paths accordingly, and everything worked fine.

PHPUnit does not set $_SERVER['DOCUMENT_ROOT'] so It was not finding my files. Apache's do that. So the CLI of PHPUnit couldn't find it.

Hope it helps someone else.

Upvotes: 1

Related Questions