The paradox: I cannot test this code because it is legacy. I need to refractor the code to make it testable. How can I manage that, without breaking existing functionality? I will need to write some tests, but… argh! This presentation explains how to safely refactor and test ‘untestable’ code – without breaking any existing functionality.
Behavior-Driven Development (BDD) is an Agile approach that mixes requirement gathering, documentation and acceptance testing. The idea is that you start by writing human-readable sentences that describe a feature of your application and how it should work. Then you implement this behavior in software. This description can produce automated tests that will verify that the feature is implemented correctly. On the testing side, BDD tools provide you the features to perform functional or acceptance tests. There are many tools that implement the BDD concept for different languages, including PHP.
PHP is not the best language to catch errors in code, like mistyped names of variables. This is what static code analysis tools (named linters or lints) can do: find bugs in code before it ever get executed. Linters don’t replace unit tests, but generally they are faster and cheaper to set up. I’ll talk about my XRef lint project (http://xref-lint.net/) as well as other helpful open source alternatives: phplint (http://www.icosaedro.it/phplint/), arcanist (http://phabricator.org/) and scrutinizer (https://scrutinizer-ci.com/).
Agile development is a big thing nowadays. Almost every project wants to deliver value as quick as possible, but not all of them succeed because of the share amount of work most projects require. But what if you could actually deliver 2 times more value, but 3 times less features? Behat is an open source Behavior Driven Development (BDD) framework for PHP inspired by the Ruby Cucumber BDD framework.
In my previous articles, PHP Unit Testing with PHPUnit and Using Mocks and Stubs in PHPUnit, I have showed how to set up PHPUnit and how to get started with unit tests and how to handle mocking and stubbing objects in order to effectively isolate your code under test. This article will explore a few ways to get the most out of your PHPUnit tests.
In my previous column PHP Unit Testing with PHPUnit,I showed how to set up PHPUnit and how to run a few simple tests. You should be able to test any function or method now that doesn’t rely on making calls out to other methods or functions – which is of course very few, as most applications are a complex combination of methods and, in PHP’s case, functions.
PHPUnit is an open source unit testing software framework for software written in the PHP programming language. Created by Sebastian Bergmann, PHPUnit is one of the xUnit family of frameworks that originated with Kent Beck’s SUnit. This article will explore PHPUnit specifically as a way to introduce the basics of automated unit testing. You’ll need a basic grasp of the PHP programming language to proceed!