2. Hello!
I am Hoang Ngoc Tu
This presentation will introduce
fundamental concepts of unit testing in
PHP and Magento ecommerce
platform.
April 2015
@hoangngoctu
3. Main Content
◎ 1. Unit Testing
◎ 2. PHPUnit
◎ 3. PHPUnit with Magento
6. What is Unit Testing?
◎ Is a software testing method by which
individual units of source code are tested
to determine whether they are fit for use.
◎ A unit is the smallest testable part of an
application.
7. Unit Test Writing
◎ The general aim is to make sure every possible path
through your code is executed at least once in a test.
◎ This means you need to write tests that exercise error
conditions too.
◎ One test method per expected outcome per method
tested.
11. Test Driven Development
◎ Step 1: Write a test that expresses how you’ll use the
code and what you need it to do.
◎ Step 2: Write enough code to get the test to pass, but
no more. If you need more code, for example, to check
for errors, first write another test to demonstrate that
feature.
◎ Step 3: Refactor to clean up the code to remove
redundancy and improve the design. Then re-run the
tests to make sure you didn’t break anything.
12.
13. At first sight of sceptical developers
◎ Time consuming
◎ Awkward, not intuitive approach
◎ Change the way we thought, the methods we worked
◎ It’s probably not in our “comfort zone”
14. In our experience
◎ Unit testing is generally not worth to
bother for small, short term, one-and-done
projects.
◎ Unit testing is crucial for enterprise system
maintenance and long term projects.
15. Why should I know it?
◎ Unit tests prove that your code actually
works.
◎ Find problems early
16. Why should I know it?
◎ You get a low-level regression-test suite.
◎ It allows you to make big changes to code
quickly.
17. Why should I know it?
◎ Test-first forces you to plan before you
code.
18. Why should I know it?
◎ In many cases, it’s faster than writing code
without tests.
◎ Most of the effort we spend on code, we
spend fixing it.
19.
20. TDD for Legacy Code
◎ Capture behaviour of current code by adding black-
box tests
◎ Refactor and add unit tests to legacy code bit-by-bit
◎ Increase test coverage over time
◎ All your new coding can be TDD
26. PHPUnit Plugins
◎ phpunit-clever-and-smart reorders your tests so that
tests that failed in a previous run are executed first.
◎ phpunit-speedtrap reports slow-running tests right in
your console.
◎ paratest can execute tests in parallel.
◎ phpunit-randomizer allows you to execute your tests
in a random order.
27. PHPUnit Packages
◎ PHP_Invoker: a utility class for invoking callables
with a timeout.
◎ DbUnit: support database interaction testing.
◎ PHPUnit_Selenium: lets you use the WebDriver API
28. PHPUnit and enterprise PHP
PHPUnit helps to
transform PHP from a
language for web
projects into a serious
and reliable enterprise
platform
30. Magento PHPUnit Integration
◎ Magento does not have built in unit test suite.
◎ Ecomdev_PHPUnit is an Magento extension to let us
create unit test suite based on PHPUnit.
◎ It is basically a wrapper, or layer between Magento
and PHPUnit.
◎ It also added its own specific methods for Magento
testing.
31. Ecomdev_PHPUnit Installation
◎ GitHub: https://github.com/EcomDev/EcomDev_PHPUnit
◎ Obtain the extension: composer
◎ Download from GitHub:
○ phpunit.xml
○ app/etc/local.xml.phpunit
32. Ecomdev_PHPUnit Installation
# Shell scripts needs to be run from this directory
cd $YOUR_MAGENTO_DIRECTORY/shell
# Specify your test database name and base url
php ecomdev-phpunit.php -a magento-config --db-name $DB_NAME --
base-url http://your.magento.url/
# Execute
bin/phpunit
34. Thanks!
◎ This presentation is a very quick introduction
to Magento unit testing.
◎ Most content and practices are included in
Demo section. Sorry slide readers.
◎ More in-depth presentations are coming.
35. Credits
Special thanks to all the people who made and released
these awesome resources for free:
◎ Simple line icons by Mirko Monti
◎ E-commerce icons by Virgil Pana
◎ Streamline iconset by Webalys
◎ Presentation template by SlidesCarnival
◎ Photographs by Unsplash & Death to the Stock Photo
(license)