How to setup PHPUnit testing

How to setup phpunit testing? I followed by book at Install PHPUnit with Composer but not success

When you created it should’ve included phpunit.

What cakephp version are you using and what version of php are you running?

I installed the phpunit 9.5. Currently I am using framework the CakePHP 4. And following book CakePHP 4 testing. I couldn’t understand how to testing the file UsersController.php. also what will do process the file testing.

To test controller see Controller Integration Testing

And create fixtures if your controllers use models.

As how to run the tests you can call vendor/bin/phpunit in your terminal

Based on this thread so far, I’m going to assume you are new to unit testing. Apologies in advance you are already experienced.

I think 'Controller Integration Testing` is the deep end of the pool. That section will give you some notion of how to proceed, but you shouldn’t look at it as a ‘typical’ case. It is actually a pretty advanced case.

Testing in general

Tests in general follow a pattern:

  • set up the fixture (data and other environmental components)
  • instantiate the system you want to test and call the method of interest
  • evaluate the result of the call
  • tear down the fixture elements (this is pretty well handled by phpUnit automatically)

Testing a Controller/Action

It’s easy to have a Controller method that expect large amounts of interrelated data to exist. There may be Authentication to negotiate before the call can proceed. There may be Components or other modules that need to be properly prepared.

In short, the fixture requirements for controller/action testing can be high!

Beyond that though, there may be multiple paths through a controller’s action. The if (request->is(post) and if (table->save(entity)) branches of a baked edit method are good examples. All the possible routes and outcomes should be tested. Not a trivial task.

Start Small

Learning to test in smaller, isolated objects will be easier.

Again, assuming you’re just beginning in testing; be patient. The benefits are undeniable but they take time to realize.

I found I needed to write my systems differently to make them testable. In the long run this has made my programs more maintainable and easier to understand. But it is a long road.

Recommended Tool

Also, you may want to look at vierge-noire / cakephp-fixture-factories , an excellent plugin that I have found makes database fixture setups MUCH more maintainable.

3 Likes