Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP Unit Testing without a framework... Possible? Advisable?

When one starts searching for PHP unit tests, one usually stumbles upon:

  1. PHPUnit.
  2. SimpleTest.
  3. A plethora of blogs explaining how to use PHPUnit and SimpleTest.
  4. StackOverflow questions about PHPUnit and SimpleTest...

...and I think you get the idea.

I was wondering: How does one go about unit testing with plain ol' PHP? Is that even a wise endeavor?

I suppose I would have to build my own little framework. I'm interested because I want to have a better understanding of what's going on in my unit tests. I'm also interested because I think a lightweight, tailored solution would run my tests faster.

Bonus question: Who's the underdog? Is there a third framework worth looking into (for acedemic purposes)?

like image 338
Stephen Avatar asked Jan 12 '11 15:01

Stephen


2 Answers

Unit testing is basically a set of assertions.

Consider the following PHPUnit test case:

class MyTest extends PHPUnit_Framework_TestCase {
   public function testFoo() {
       $obj = new My;
       $this->assertEquals('bar', $obj->foo());
   }
}

You can have a similar test case without using PHPUnit:

class MyTest {
   public function testFoo() {
       $obj = new My;
       assert("$obj->foo() == 'bar'");
   }
}

However, by doing it without a framework, you will have to manually create an instance of the test case (MyTest) and call each test method manually (MyTest::testFoo, etc.).

The framework (e.g.: PHPUnit) is nothing more than a set of "helpers" to make it easier and faster: by automatically generating skeleton; with built-in mock objects, command lines scripts, etc.

You can still unit test without a framework, but in the end, you'll probably save more time using one, because after all, that's generally what frameworks are for.

like image 194
netcoder Avatar answered Oct 10 '22 17:10

netcoder


My view would be what's so wrong with the standard wheel (PHPUnit in all probability) that warrants the development of a replacement? After all, Isn't a proven solution the wiser choice in this instance?

Additionally, the output of the standard tools will be easier to use if you ever want to take advantage of a Continuous Integration server further down the line. (You could of course make your own tool output in an identical format, but that leads me back to the "why re-invent the wheel" argument.)

like image 22
John Parker Avatar answered Oct 10 '22 18:10

John Parker