phpunit with magento
TRANSCRIPT
Introduction to PHPUnit with Magento
Hello!I am Hoang Ngoc Tu
This presentation will introduce fundamental concepts of unit testing in PHP and Magento ecommerce platform.
April 2015@hoangngoctu
Main Content
◎ 1. Unit Testing
◎ 2. PHPUnit
◎ 3. PHPUnit with Magento
1.Unit TestingWhat is it? Why should I need to know?
“All code is guilty, until proven
innocent.
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.
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.
Unit Testis an automated tool for
programmers
Unit Testcan’t replace
integration testing
Unit Testthe core of TDD - Test Driven Development
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.
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”
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.
Why should I know it?
◎ Unit tests prove that your code actually works.
◎ Find problems early
Why should I know it?
◎ You get a low-level regression-test suite.
◎ It allows you to make big changes to code quickly.
Why should I know it?
◎ Test-first forces you to plan before you code.
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.
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
2.PHPUnitde-facto standard unit testing framework for PHP
PHPUnit
◎ Created by Sebastian Bergmann
◎ Homepage: https://phpunit.de/
◎ GitHub: https://github.com/sebastianbergmann/phpunit
PHPUnit Installation
# Manually way:
wget https://phar.phpunit.de/phpunit.phar
chmod +x phpunit.phar
mv phpunit.phar /usr/local/bin/phpunit
# Ubuntu way:
sudo apt-get install phpunit
# Composer way: check documentation for details
php composer.phar install
# Verify
phpunit --version
PHPUnit Fundamental Techniques
◎ Assertions
◎ Mocking○ Please note that final, private and static methods
cannot be mocked.
DEMO TIMEPlease check my github for code
https://github.com/tuhn/phpunit_demo
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.
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
PHPUnit and enterprise PHP
PHPUnit helps to transform PHP from a language for web projects into a serious and reliable enterprise platform
3.PHPUnit with MagentoWe will need an extension
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.
Ecomdev_PHPUnit Installation
◎ GitHub: https://github.com/EcomDev/EcomDev_PHPUnit ◎ Obtain the extension: composer
◎ Download from GitHub:○ phpunit.xml○ app/etc/local.xml.phpunit
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
DEMO TIMEand some exercises
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.
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)