A look at how action helpers function and effective ways of unit testing them.
via Zendcasts.
Small Hacks for a Large World
A look at how action helpers function and effective ways of unit testing them.
via Zendcasts.
What I do is I have my controllers fetch all their dependencies from the bootstrap and/or front controller. The most common example is to pull the db resource from the bootstrap:
// in controller
$db = $this->getInvokeArg('bootstrap')->getResource('db');
But I also take it a step further. For example, if I’m using data mappers, I have the action controller check the front controller for the data mapper I need:
// in controller
$postsMapper = $this->getInvokeArg('posts_mapper');
I then update your unit test to inject the posts mapper with a stub:
// in unit test
$this->frontController->setParam('posts_mapper', $stubPostsMapper);
However, that invoke arg won’t exist in production, so I wrap that call in an if statement a la “lazy loading” style:
if (null === ($postsMapper = $this->getInvokeArg('posts_mapper'))) {
$postsMapper = new Default_Model_Mapper_Posts();
}
What this does is it allows me to stub in my stub posts mapper in my unit tests while letting the controller lazy-load the real one in production.
An alternative is to use Zend_Registry, but I find this to be a bit cleaner without the static calls.
—
Hector Virgen
Giorgio Sironi writes an interesting TDD story; I am halfway through reading Growing object-oriented software, guided by tests, a book that teaches Test-Driven Development in a Java environment. A review will come soon, since the process described in this work is really language-agnostic and interesting also for php developers.
However, the book’s authors introduce a very productive practice, which consists in a double cycle of TDD:
* a longer cycle, where you write acceptance (aka end-to-end) tests, deriving them from the user stories or formal requirements, and make them pass;
* a shorter cycle contained in the first, which happens in the phase when an acceptance test is red: you write unit tests and make them pass until the related acceptance test does not fail anymore.
Read complete story @ PHP Zone.
Writing maintainable code is an art that takes effort and practice to master.
Part of that art is learning what tools and strategies will assist you in that effort. In this tutorial, we will cover a variety of practices and tools that can make your life, and the lives of your team members, easier as you develop your applications. Among them, we will provide overviews of:
Slides: PHP Best Practices
Mike Willbanks writes; Continuous integration is all the rage these days; you are unit testing your code are you not? During some consulting in January with the help of Sebastian Bergmann, from thePHP.cc, we setup continuous integration utilizing Atlassian Bamboo and received training on PHPUnit.
Using Atlassian Bamboo for continuous integration will take you a bit to setup, however, I have found it to be an invaluable tool when utilizing the Atlassian stack (JIRA, Confluence, Crucible, Bamboo and Crowd).
This posting assumes the following:
This posting will go over the following:
Read the rest over at Mike Willbanks blog.
Matthew Turland has written a very nice article on Unit Testing using Zend_Test, Zend_Test_PHPUnit_DatabaseTestCase, Zend_Test_PHPUnit_ControllerTestCase where he uses a few interesting solutions. Definitely worth a read.
“I worked on a project recently where we used Zend Framework. As part of that project, I was tasked with writing unit tests. So, I went to the “tests” directory generated for me by the zf CLI utility to get started…”
Did you know that you can automate unit tests (which is the PHP worlds equalient of compilation checks 🙂 ).
Set up your development team using local checkouts of the project and have them do local PHPUnit tests, check their changes in and then get Continuous Integration checks done on a central server using phpUnderControl that emails the team with success/fail reports, it’s a good way to work.
phpUnderControl is an addon application for the continuous integration tool CruiseControl, which integrates some of the best PHP development tools. This project aims to make your first steps with CruiseControl and PHP as easy as possible. Therefore phpUnderControl comes with a command line tool that performs all modifications to an existing CruiseControl installation.
Go and check it out today 🙂