phpunit with magento

Post on 16-Jul-2015

267 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

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.

top related