views:

30

answers:

1

I've got a PHP script that runs at the command line, executing classes that are already unit tested with PHPUnit.

However, I'd like to verify that the script itself has no logical errors and runs properly.

// require classes
require_once 'injectedClass.php';
require_once 'DBClass.php';
require_once 'taskEngine.php';

$injectedObj = new injectedClass;
$dbObj = new DBClass;

$taskRunner = new taskEngine($injectedObj, $dbObj);

$taskRunner->task1()->task2();

$taskRunner->finish();

//etc

Updated Solution

It is as simple as djechelon's answer suggested, I was overthinking it. The solution is to create a PHPUnit test and pre-assign the variables passed into the taskRunner to mock objects. In the live script, a simple check before creating real objects allows the same script to be used for testing and production:

test:

$injectedObj = $this->getMock('injectedClass');
$dbObj = $this->getMock('DBClass');

require_once '/path/to/live/script.php';

$this->assertTrue($taskRunner->finished);

script:

// require classes

if(!isset($injectedObj)) {
    $injectedObj = new injectedClass;
}
if(!isset($dbObj)) {
    $dbObj = new DBClass;
}

$taskRunner = new taskEngine($injectedObj, $dbObj);

// run tasks
+1  A: 

Can't you create a PHPUnit test for your script?

You could perform an integration test by hand, creating a script that runs your script with a set of given input parameters and compare its output to what you could expect.

Beware of the chicken-and-egg problem: your testing script cannot be tested itself by a test bench...

Anyway I'm not sure you need testing your script if it's so simple. A few manual runs might suffice...

djechelon
I think I had not described my problem quite right, I updated the question.
Clay Hinson