I am writing a Zend Framework application and unit testing it with PHPUnit. In general, things are going swimmingly however I have a small, but annoying issue with PHPUnit and code coverage – it sometimes tells me that a particular line is not tested, and I don’t know how to force it to be tested.
In the following code, for example, I launch two tests: one with a GET request, one with a POST request. The tests pass, and that’s all fine. When I look at the code coverage, however, it shows me that the ‘else’ line is not executed.
public function editAction()
{
if ($request->isPost()) {
// do actions related to POST
} else {
// do action related to GET
}
}
Any ideas? As a side issue, do you usually persevere with unit tests until you get 100% code coverage? Or is this not really practical?
Thanks muchly…
The code you have only comments for is what matters. The closing brace of a block will be shown as executable in the code coverage report if it’s possible to fall through to the end. Look for a branch that you aren’t actually testing.
As for the 100% code coverage goal, I agree wholeheartedly with Bill. For some framework classes that I write I will strive to make 100%, but I know that doesn’t mean I’ve truly tested every possibility. Often, when I find myself working overly hard to achieve 100% coverage, it’s probably OCD kicking in. 🙂
Just . . . one . . . more . . . test . . .