PHPUnit - Unit testing

Post on 01-Sep-2014

2.287 views 3 download

Tags:

description

PHPUnit - Unit testing

Transcript of PHPUnit - Unit testing

LOGO

“ Add your company slogan ”

Keep it Simple Stupid

UNIT TESTING

Presentation by: Thu.Nguyen

KiSS Concept

CONTENT

Q&A

Demo

PHPUnit

Unit Testing

Software Testing

KiSS Concept

SOFTWARE TESTING

What is Software Testing?

Testing is the process of executing a program with intent of finding errors (The art of software testing – Glenford J.Myers)

4

Our program

The output is correct?

I1, I2, I3, …, In, … Expected results

= ?Obtained results

“Inputs”

- No code inspection - No code analysis- No model checking - No bug fixing- No debugging

KiSS Concept

Level of testing

Unit Testing

Integration Testing

Functional Testing

System Testing

Load/Stress Testing

User Accepted Testing

Regression Testing

Programmer

Tester

KiSS Concept

Testing Techniques

Functional Testing(Black box)

Select test cases based on the requirement or design specification

Emphasize on the external behavior of software

Structural Testing(White box)

Select test cases based on the implement of software

Emphasize on the internal structure of software

KiSS Concept

Black box vs White box

KiSS Concept

Process of testing

Test cases

Design test cases

Prepare test data

Run program with test data

Test data

Test results

Test reports

Compare results to test

cases

KiSS Concept

UNIT TESTING

KiSS Concept

What is unit testing?

“In computer programming, unit testing is a method by which individual units of source code are tested to determine if they are fit for use. A unit is the smallest testable part of an application.” (Wikipedia)

A “unit ” is the smallest testable part of an application: a function or class method.

KiSS Concept

Benefit of unit testing

Easy to defect error

KiSS Concept

Benefit of unit testing

Safer refactoring

KiSS Concept

Benefit of unit testing

Automated test

KiSS Concept

Benefit of unit testing

Long term of saving time and money

KiSS Concept

When do you write the test?

Focus on requirements Thinking about how to

code will be consumed Stop coding when meet

requirement Harder initially

Focus on code Thinking about algorithm More refactoring Easier initially

Before coding(TDD) After/During coding

KiSS Concept

How do I test?

Isolate with the code being tested

Short, simple, fast, readable

No conditional logic or loop (if, switch, while)

One test should be one behavior

KiSS Concept

PHPUNIT

KiSS Concept

Introduction

Is a unit testing framework written in PHP, created by Sebastian Bergmann.

Part of the xUnit family of testing frameworks. Integrated/supported

• Zend Studio• Zend Framework• Symfony• Doctrine

KiSS Concept

Installation

Install with PEAR:pear channel-discover pear.phpunit.depear install phpunit/PHPUnit

Update:pear upgrade phpunit/PHPUnit

Xdebug:sudo apt-get install php5-xdebug php5-dev

Set include path in /etc/php5/cli/php.ini include_path = “.:/usr/share/php”

KiSS Concept

Definitions

Test suite

Test suite

Test case

setUp()testMethodtearDown()

/** *@annotation*/testMethod(){assertion}

Report

Test case

setUp()testMethodtearDown()

/** *@annotation*/testMethod(){assertion}

Code coverageLogging

KiSS Concept

Simple test

KiSS Concept

Running test

Go to command line and run:phpunit /path/to/file/test.php or phpunit classname /path/to/file/test.php

KiSS Concept

Running test

Command line

IDE Zend Studio NetBean

Continuous Integration phpUnderControl Cruise Control

KiSS Concept

Result OK: all tests are successful FAILURES: test is fail or error Result of each test:

• . test succeeds• F an assertion fails• E an error• S test has been skipped• I test is marked as being incomplete or not yet

implement

KiSS Concept

Features

@dataProvider

@exception

Fixture: setUp() and tearDown()

Double: stub and mock object

Database

Code coverage

KiSS Concept

Data provider

Is a method that returns an array of values to use in a test.

Makes tests shorter and more concise.

Data provider can use array or file csv.

KiSS Concept

Data provider

Input 1 myfunction() Report 1Result 1 Expected 1

compare

Input 2 myfunction() Report 2Result 2 Expected 2

compare

Input 3 myfunction() Report 3Result 3 Expected 3

compare

KiSS Concept

Data provider

/** @dataProvider*/testMethod($input, $expect){ myfunction()}

Report 1Data Providers

Input 1 expect1

Input 2 expect 2

Input 3 expect 3

Report 2

Report 3

KiSS Concept

Use array

KiSS Concept

Use csv file

KiSS Concept

Exception

Test exception are thrown.

Test expected messages of exception are thrown.

KiSS Concept

Example exception

KiSS Concept

Fixtures

Is constructor method and destructor method in test case

PHPUnit supports 2 methods:• setUp(): the function run when test methods start to

run• tearDown(): the function run after test methods end

KiSS Concept

Fixtures

Start

setUp()

testOne() testTwo() testThree()

tearDown()

End

KiSS Concept

Example fixtures

KiSS Concept

Test double

MyClass

myMethod($object){…$object->otherMethod();…}

Database Connection

File system

Web service

Function depends on other objects, other components

KiSS Concept

MyClass

myMethod(){…other Method…}

Database

File system

Web service

MyClassTest

testMyMethod(){……}

Test double

How to isolate environment ?

KiSS Concept

Test double

MyClass

myMethod(){…other Method…}

Database Mock

File system Mock

Web service Mock

MyClassTest

testMyMethod(){……}

Set mocks

Solution: use copy object Test double

return fixed value

return fixed value

return fixed value

KiSS Concept

Stub and Mock

Set method return values

Test state

Check method calls Check arguments used Test interactions

Stub Mock

KiSS Concept

Example stub object

KiSS Concept

Example mock object

KiSS Concept

Database testing

Set up database connection.

Set up initial dataset.

Provide methods to get dataset from database.

Provide methods to compare two datasets.

Type of dataset Flat XML XML CSV MySQL dump

KiSS Concept

Organizing

Allow to organize tests to test suite to run one time

Use file system: All test files end with ‘Test’. Organize directory structure.

Use configuration file: phpunit.xml

KiSS Concept

Use file system

KiSS Concept

Use phpunit.xml

KiSS Concept

Code Coverage

Help to see what are executed when the tests are run.

Help to find code that is not yet tested.

Help to measure testing completeness.

KiSS Concept

Code Coverage

KiSS Concept

Code Coverage

Red: code is not executedGreen: code is executed

Test cases cover this line code

Grey: dead code

Note: dead code is source code which is executed but whose result is never used.

KiSS Concept

Logging

Test results HTML <log type="testdox-html" target="./log/testdox.html" />

KiSS Concept

Logging

Test result XML <log type="junit" target="./log/logfile.xml" />

KiSS Concept

DEMO

KiSS Concept

References PHPUnit manual

Training course PHPUnit – Nick Belhome,2010

Unit Testing with PHPUnit – Michelangelo van Dam

Ini2it Unit Testing after ZF 1.8 - Michelangelo van Dam

PHPUnit From Zero To Hero – Jeremy Cook

PHPUnit & Continous Intergration – AlexMace

Advanced PHPUnit Testing – Mike Lively

Practical PHP Testing Patterns

http://framework.zend.com/manual/1.12/ru/zend.test.phpunit.db.html

KiSS Concept

QUESTION & ANSWEAR

Q&A

LOGO

“ Add your company slogan ”

Keep it Simple Stupid