SlideShare a Scribd company logo
LOGO
“ Add your company slogan ”
Keep it Simple Stupid
Presentation by: Thu.Nguyen
CONTENT
KiSS Concept
Q&A
Demo
PHPUnit
Unit Testing
Software Testing
KiSS Concept
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
Level of testing
KiSS Concept
Unit Testing
Integration Testing
Functional Testing
System Testing
Load/Stress Testing
User Accepted Testing
Regression Testing
Programmer
Tester
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
KiSS Concept
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
What is unit testing?
KiSS Concept
 “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.
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
KiSS Concept
Before coding(TDD) After/During coding
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
KiSS Concept
Introduction
KiSS Concept
 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
Installation
KiSS Concept
Install with PEAR:
pear channel-discover pear.phpunit.de
pear 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”
Definitions
KiSS Concept
Test suite
Test suite
Test case
setUp()
testMethod
tearDown()
/*
*
*@annotation
*/
testMethod(){
assertion
}
Report
Test case
setUp()
testMethod
tearDown()
/*
*
*@annotation
*/
testMethod(){
assertion
}
Code coverage
Logging
Simple test
KiSS Concept
Running test
KiSS Concept
Go to command line and run:
phpunit /path/to/file/test.php or phpunit classname
/path/to/file/test.php
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
KiSS Concept
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
Data provider
KiSS Concept
/*
* @dataProvider
*/
testMethod($input, $expect)
{
myfunction()
}
Report 1
Data Providers
Input 1 expect1
Input 2 expect 2
Input 3 expect 3
Report 2
Report 3
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
KiSS Concept
Start
setUp()
testOne() testTwo() testThree()
tearDown()
End
KiSS Concept
Example fixtures
Test double
KiSS Concept
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 ?
Test double
KiSS Concept
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
Stub and Mock
 Set method return
values
 Test state
 Check method calls
 Check arguments used
 Test interactions
KiSS Concept
Stub Mock
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
KiSS Concept
 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.
Code Coverage
KiSS Concept
Code Coverage
KiSS Concept
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.
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
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
KiSS Concept
LOGO
“ Add your company slogan ”
Keep it Simple Stupid

More Related Content

What's hot

ATDD Using Robot Framework
ATDD Using Robot FrameworkATDD Using Robot Framework
ATDD Using Robot Framework
Pekka Klärck
 
Python in Test automation
Python in Test automationPython in Test automation
Python in Test automation
Krishnana Sreeraman
 
JUnit Presentation
JUnit PresentationJUnit Presentation
JUnit Presentation
priya_trivedi
 
Intro to react native
Intro to react nativeIntro to react native
Intro to react native
ModusJesus
 
Introduction to robot framework
Introduction to robot frameworkIntroduction to robot framework
Introduction to robot framework
Chonlasith Jucksriporn
 
Robot framework
Robot frameworkRobot framework
Robot framework
boriau
 
Python unit testing
Python unit testingPython unit testing
Python unit testing
Darryl Sherman
 
Robot Framework Introduction
Robot Framework IntroductionRobot Framework Introduction
Robot Framework Introduction
Pekka Klärck
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
Sergey Podolsky
 
Unit Testing Concepts and Best Practices
Unit Testing Concepts and Best PracticesUnit Testing Concepts and Best Practices
Unit Testing Concepts and Best Practices
Derek Smith
 
Test and Behaviour Driven Development (TDD/BDD)
Test and Behaviour Driven Development (TDD/BDD)Test and Behaviour Driven Development (TDD/BDD)
Test and Behaviour Driven Development (TDD/BDD)
Lars Thorup
 
Selenium
SeleniumSelenium
Understanding Unit Testing
Understanding Unit TestingUnderstanding Unit Testing
Understanding Unit Testing
ikhwanhayat
 
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
SangIn Choung
 
Cucumber & gherkin language
Cucumber & gherkin languageCucumber & gherkin language
Cucumber & gherkin language
selvanathankapilan
 
Test Automation Using Python | Edureka
Test Automation Using Python | EdurekaTest Automation Using Python | Edureka
Test Automation Using Python | Edureka
Edureka!
 
Code Coverage Revised : EclEmma on JaCoCo
Code Coverage Revised : EclEmma on JaCoCoCode Coverage Revised : EclEmma on JaCoCo
Code Coverage Revised : EclEmma on JaCoCo
Evgeny Mandrikov
 
Double Loop: TDD & BDD Done Right!
Double Loop: TDD & BDD Done Right!Double Loop: TDD & BDD Done Right!
Double Loop: TDD & BDD Done Right!
Jessica Mauerhan
 
Robot framework
Robot frameworkRobot framework
API Testing: The heart of functional testing" with Bj Rollison
API Testing: The heart of functional testing" with Bj RollisonAPI Testing: The heart of functional testing" with Bj Rollison
API Testing: The heart of functional testing" with Bj Rollison
TEST Huddle
 

What's hot (20)

ATDD Using Robot Framework
ATDD Using Robot FrameworkATDD Using Robot Framework
ATDD Using Robot Framework
 
Python in Test automation
Python in Test automationPython in Test automation
Python in Test automation
 
JUnit Presentation
JUnit PresentationJUnit Presentation
JUnit Presentation
 
Intro to react native
Intro to react nativeIntro to react native
Intro to react native
 
Introduction to robot framework
Introduction to robot frameworkIntroduction to robot framework
Introduction to robot framework
 
Robot framework
Robot frameworkRobot framework
Robot framework
 
Python unit testing
Python unit testingPython unit testing
Python unit testing
 
Robot Framework Introduction
Robot Framework IntroductionRobot Framework Introduction
Robot Framework Introduction
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
 
Unit Testing Concepts and Best Practices
Unit Testing Concepts and Best PracticesUnit Testing Concepts and Best Practices
Unit Testing Concepts and Best Practices
 
Test and Behaviour Driven Development (TDD/BDD)
Test and Behaviour Driven Development (TDD/BDD)Test and Behaviour Driven Development (TDD/BDD)
Test and Behaviour Driven Development (TDD/BDD)
 
Selenium
SeleniumSelenium
Selenium
 
Understanding Unit Testing
Understanding Unit TestingUnderstanding Unit Testing
Understanding Unit Testing
 
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
katalon studio 툴을 이용한 GUI 테스트 자동화 가이드
 
Cucumber & gherkin language
Cucumber & gherkin languageCucumber & gherkin language
Cucumber & gherkin language
 
Test Automation Using Python | Edureka
Test Automation Using Python | EdurekaTest Automation Using Python | Edureka
Test Automation Using Python | Edureka
 
Code Coverage Revised : EclEmma on JaCoCo
Code Coverage Revised : EclEmma on JaCoCoCode Coverage Revised : EclEmma on JaCoCo
Code Coverage Revised : EclEmma on JaCoCo
 
Double Loop: TDD & BDD Done Right!
Double Loop: TDD & BDD Done Right!Double Loop: TDD & BDD Done Right!
Double Loop: TDD & BDD Done Right!
 
Robot framework
Robot frameworkRobot framework
Robot framework
 
API Testing: The heart of functional testing" with Bj Rollison
API Testing: The heart of functional testing" with Bj RollisonAPI Testing: The heart of functional testing" with Bj Rollison
API Testing: The heart of functional testing" with Bj Rollison
 

Similar to PHPUnit - Unit testing

Automation Framework 042009 V2
Automation Framework   042009  V2Automation Framework   042009  V2
Automation Framework 042009 V2
Devukjs
 
Continuous Delivery - Automate & Build Better Software with Travis CI
Continuous Delivery - Automate & Build Better Software with Travis CIContinuous Delivery - Automate & Build Better Software with Travis CI
Continuous Delivery - Automate & Build Better Software with Travis CI
wajrcs
 
Strategy-driven Test Generation with Open Source Frameworks
Strategy-driven Test Generation with Open Source FrameworksStrategy-driven Test Generation with Open Source Frameworks
Strategy-driven Test Generation with Open Source Frameworks
Dimitry Polivaev
 
Test box bdd
Test box bddTest box bdd
Test box bdd
ColdFusionConference
 
Testing in Craft CMS
Testing in Craft CMSTesting in Craft CMS
Testing in Craft CMS
JustinHolt20
 
Python and test
Python and testPython and test
Python and test
Micron Technology
 
Gallio Crafting A Toolchain
Gallio Crafting A ToolchainGallio Crafting A Toolchain
Gallio Crafting A Toolchain
ConSanFrancisco123
 
Unit tests and TDD
Unit tests and TDDUnit tests and TDD
Unit tests and TDD
Roman Okolovich
 
Test Driven Development with Sql Server
Test Driven Development with Sql ServerTest Driven Development with Sql Server
Test Driven Development with Sql Server
David P. Moore
 
Automation Framework 042009 V2
Automation Framework   042009  V2Automation Framework   042009  V2
Automation Framework 042009 V2
guestb66d91
 
Into The Box 2018 | Assert control over your legacy applications
Into The Box 2018 | Assert control over your legacy applicationsInto The Box 2018 | Assert control over your legacy applications
Into The Box 2018 | Assert control over your legacy applications
Ortus Solutions, Corp
 
VT.NET 20160411: An Intro to Test Driven Development (TDD)
VT.NET 20160411: An Intro to Test Driven Development (TDD)VT.NET 20160411: An Intro to Test Driven Development (TDD)
VT.NET 20160411: An Intro to Test Driven Development (TDD)
Rob Hale
 
Unit testing php-unit - phing - selenium_v2
Unit testing   php-unit - phing - selenium_v2Unit testing   php-unit - phing - selenium_v2
Unit testing php-unit - phing - selenium_v2
Tricode (part of Dept)
 
Automated Testing with Databases
Automated Testing with DatabasesAutomated Testing with Databases
Automated Testing with Databases
elliando dias
 
The Professional Programmer
The Professional ProgrammerThe Professional Programmer
The Professional Programmer
Dave Cross
 
The Art Of Debugging
The Art Of DebuggingThe Art Of Debugging
The Art Of Debugging
svilen.ivanov
 
Introduction to Behavior Driven Development
Introduction to Behavior Driven Development Introduction to Behavior Driven Development
Introduction to Behavior Driven Development
Robin O'Brien
 
Coldbox developer training – session 4
Coldbox developer training – session 4Coldbox developer training – session 4
Coldbox developer training – session 4
Billie Berzinskas
 
SE2018_Lec 20_ Test-Driven Development (TDD)
SE2018_Lec 20_ Test-Driven Development (TDD)SE2018_Lec 20_ Test-Driven Development (TDD)
SE2018_Lec 20_ Test-Driven Development (TDD)
Amr E. Mohamed
 
Test Driven Development Introduction
Test Driven Development IntroductionTest Driven Development Introduction
Test Driven Development Introduction
Nguyen Hai
 

Similar to PHPUnit - Unit testing (20)

Automation Framework 042009 V2
Automation Framework   042009  V2Automation Framework   042009  V2
Automation Framework 042009 V2
 
Continuous Delivery - Automate & Build Better Software with Travis CI
Continuous Delivery - Automate & Build Better Software with Travis CIContinuous Delivery - Automate & Build Better Software with Travis CI
Continuous Delivery - Automate & Build Better Software with Travis CI
 
Strategy-driven Test Generation with Open Source Frameworks
Strategy-driven Test Generation with Open Source FrameworksStrategy-driven Test Generation with Open Source Frameworks
Strategy-driven Test Generation with Open Source Frameworks
 
Test box bdd
Test box bddTest box bdd
Test box bdd
 
Testing in Craft CMS
Testing in Craft CMSTesting in Craft CMS
Testing in Craft CMS
 
Python and test
Python and testPython and test
Python and test
 
Gallio Crafting A Toolchain
Gallio Crafting A ToolchainGallio Crafting A Toolchain
Gallio Crafting A Toolchain
 
Unit tests and TDD
Unit tests and TDDUnit tests and TDD
Unit tests and TDD
 
Test Driven Development with Sql Server
Test Driven Development with Sql ServerTest Driven Development with Sql Server
Test Driven Development with Sql Server
 
Automation Framework 042009 V2
Automation Framework   042009  V2Automation Framework   042009  V2
Automation Framework 042009 V2
 
Into The Box 2018 | Assert control over your legacy applications
Into The Box 2018 | Assert control over your legacy applicationsInto The Box 2018 | Assert control over your legacy applications
Into The Box 2018 | Assert control over your legacy applications
 
VT.NET 20160411: An Intro to Test Driven Development (TDD)
VT.NET 20160411: An Intro to Test Driven Development (TDD)VT.NET 20160411: An Intro to Test Driven Development (TDD)
VT.NET 20160411: An Intro to Test Driven Development (TDD)
 
Unit testing php-unit - phing - selenium_v2
Unit testing   php-unit - phing - selenium_v2Unit testing   php-unit - phing - selenium_v2
Unit testing php-unit - phing - selenium_v2
 
Automated Testing with Databases
Automated Testing with DatabasesAutomated Testing with Databases
Automated Testing with Databases
 
The Professional Programmer
The Professional ProgrammerThe Professional Programmer
The Professional Programmer
 
The Art Of Debugging
The Art Of DebuggingThe Art Of Debugging
The Art Of Debugging
 
Introduction to Behavior Driven Development
Introduction to Behavior Driven Development Introduction to Behavior Driven Development
Introduction to Behavior Driven Development
 
Coldbox developer training – session 4
Coldbox developer training – session 4Coldbox developer training – session 4
Coldbox developer training – session 4
 
SE2018_Lec 20_ Test-Driven Development (TDD)
SE2018_Lec 20_ Test-Driven Development (TDD)SE2018_Lec 20_ Test-Driven Development (TDD)
SE2018_Lec 20_ Test-Driven Development (TDD)
 
Test Driven Development Introduction
Test Driven Development IntroductionTest Driven Development Introduction
Test Driven Development Introduction
 

Recently uploaded

JavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green MasterplanJavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green Masterplan
Miro Wengner
 
"What does it really mean for your system to be available, or how to define w...
"What does it really mean for your system to be available, or how to define w..."What does it really mean for your system to be available, or how to define w...
"What does it really mean for your system to be available, or how to define w...
Fwdays
 
"$10 thousand per minute of downtime: architecture, queues, streaming and fin...
"$10 thousand per minute of downtime: architecture, queues, streaming and fin..."$10 thousand per minute of downtime: architecture, queues, streaming and fin...
"$10 thousand per minute of downtime: architecture, queues, streaming and fin...
Fwdays
 
GNSS spoofing via SDR (Criptored Talks 2024)
GNSS spoofing via SDR (Criptored Talks 2024)GNSS spoofing via SDR (Criptored Talks 2024)
GNSS spoofing via SDR (Criptored Talks 2024)
Javier Junquera
 
QA or the Highway - Component Testing: Bridging the gap between frontend appl...
QA or the Highway - Component Testing: Bridging the gap between frontend appl...QA or the Highway - Component Testing: Bridging the gap between frontend appl...
QA or the Highway - Component Testing: Bridging the gap between frontend appl...
zjhamm304
 
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfHow to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
Chart Kalyan
 
From Natural Language to Structured Solr Queries using LLMs
From Natural Language to Structured Solr Queries using LLMsFrom Natural Language to Structured Solr Queries using LLMs
From Natural Language to Structured Solr Queries using LLMs
Sease
 
Christine's Supplier Sourcing Presentaion.pptx
Christine's Supplier Sourcing Presentaion.pptxChristine's Supplier Sourcing Presentaion.pptx
Christine's Supplier Sourcing Presentaion.pptx
christinelarrosa
 
Apps Break Data
Apps Break DataApps Break Data
Apps Break Data
Ivo Velitchkov
 
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-EfficiencyFreshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
ScyllaDB
 
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and BioinformaticiansBiomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Neo4j
 
Dandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity serverDandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity server
Antonios Katsarakis
 
High performance Serverless Java on AWS- GoTo Amsterdam 2024
High performance Serverless Java on AWS- GoTo Amsterdam 2024High performance Serverless Java on AWS- GoTo Amsterdam 2024
High performance Serverless Java on AWS- GoTo Amsterdam 2024
Vadym Kazulkin
 
Must Know Postgres Extension for DBA and Developer during Migration
Must Know Postgres Extension for DBA and Developer during MigrationMust Know Postgres Extension for DBA and Developer during Migration
Must Know Postgres Extension for DBA and Developer during Migration
Mydbops
 
"Scaling RAG Applications to serve millions of users", Kevin Goedecke
"Scaling RAG Applications to serve millions of users",  Kevin Goedecke"Scaling RAG Applications to serve millions of users",  Kevin Goedecke
"Scaling RAG Applications to serve millions of users", Kevin Goedecke
Fwdays
 
AppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSFAppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSF
Ajin Abraham
 
Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)
Jakub Marek
 
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
Jason Yip
 
Astute Business Solutions | Oracle Cloud Partner |
Astute Business Solutions | Oracle Cloud Partner |Astute Business Solutions | Oracle Cloud Partner |
Astute Business Solutions | Oracle Cloud Partner |
AstuteBusiness
 
Harnessing the Power of NLP and Knowledge Graphs for Opioid Research
Harnessing the Power of NLP and Knowledge Graphs for Opioid ResearchHarnessing the Power of NLP and Knowledge Graphs for Opioid Research
Harnessing the Power of NLP and Knowledge Graphs for Opioid Research
Neo4j
 

Recently uploaded (20)

JavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green MasterplanJavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green Masterplan
 
"What does it really mean for your system to be available, or how to define w...
"What does it really mean for your system to be available, or how to define w..."What does it really mean for your system to be available, or how to define w...
"What does it really mean for your system to be available, or how to define w...
 
"$10 thousand per minute of downtime: architecture, queues, streaming and fin...
"$10 thousand per minute of downtime: architecture, queues, streaming and fin..."$10 thousand per minute of downtime: architecture, queues, streaming and fin...
"$10 thousand per minute of downtime: architecture, queues, streaming and fin...
 
GNSS spoofing via SDR (Criptored Talks 2024)
GNSS spoofing via SDR (Criptored Talks 2024)GNSS spoofing via SDR (Criptored Talks 2024)
GNSS spoofing via SDR (Criptored Talks 2024)
 
QA or the Highway - Component Testing: Bridging the gap between frontend appl...
QA or the Highway - Component Testing: Bridging the gap between frontend appl...QA or the Highway - Component Testing: Bridging the gap between frontend appl...
QA or the Highway - Component Testing: Bridging the gap between frontend appl...
 
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfHow to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
 
From Natural Language to Structured Solr Queries using LLMs
From Natural Language to Structured Solr Queries using LLMsFrom Natural Language to Structured Solr Queries using LLMs
From Natural Language to Structured Solr Queries using LLMs
 
Christine's Supplier Sourcing Presentaion.pptx
Christine's Supplier Sourcing Presentaion.pptxChristine's Supplier Sourcing Presentaion.pptx
Christine's Supplier Sourcing Presentaion.pptx
 
Apps Break Data
Apps Break DataApps Break Data
Apps Break Data
 
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-EfficiencyFreshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-Efficiency
 
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and BioinformaticiansBiomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
 
Dandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity serverDandelion Hashtable: beyond billion requests per second on a commodity server
Dandelion Hashtable: beyond billion requests per second on a commodity server
 
High performance Serverless Java on AWS- GoTo Amsterdam 2024
High performance Serverless Java on AWS- GoTo Amsterdam 2024High performance Serverless Java on AWS- GoTo Amsterdam 2024
High performance Serverless Java on AWS- GoTo Amsterdam 2024
 
Must Know Postgres Extension for DBA and Developer during Migration
Must Know Postgres Extension for DBA and Developer during MigrationMust Know Postgres Extension for DBA and Developer during Migration
Must Know Postgres Extension for DBA and Developer during Migration
 
"Scaling RAG Applications to serve millions of users", Kevin Goedecke
"Scaling RAG Applications to serve millions of users",  Kevin Goedecke"Scaling RAG Applications to serve millions of users",  Kevin Goedecke
"Scaling RAG Applications to serve millions of users", Kevin Goedecke
 
AppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSFAppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSF
 
Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)
 
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
 
Astute Business Solutions | Oracle Cloud Partner |
Astute Business Solutions | Oracle Cloud Partner |Astute Business Solutions | Oracle Cloud Partner |
Astute Business Solutions | Oracle Cloud Partner |
 
Harnessing the Power of NLP and Knowledge Graphs for Opioid Research
Harnessing the Power of NLP and Knowledge Graphs for Opioid ResearchHarnessing the Power of NLP and Knowledge Graphs for Opioid Research
Harnessing the Power of NLP and Knowledge Graphs for Opioid Research
 

PHPUnit - Unit testing

Editor's Notes

  1. - Kiểm thử phần mềm là quá trình thực thi một hệ thống phần mềm để xác định xem phần mềm đó có đúng với đặc tả không và thực hiện trong môi trường như mong đợi hay không. - Mục đích của kiểm thử phần mềm:Tìmralỗichưađượcpháthiệnmộtcáchsớmnhất, hiệuquảnhấtĐảmbảolỗiđãđượcsửa- Kiểmthửphầnmềmkhôngkiểmtra code, khôngkiểmtra database, model, không debug, không fix bug
  2. Unit testing : làkiểu test kiểmtra code xemliệuchứcnăngnóđangthựchiệncóđúngcách hay khôngtheonhưyêucầu.Integration testing : làkiểu test kiểmtraliệutấtcảcác module làđượckếthợphoặcchưakếthợplạicùngvớinhauthựchiệncôngviệccóđạtđượckếtquảnhưtàiliệuyêucầuđãđượcxácđịnh (do mỗilậptrìnhviênthựchiệntrêncác module khácnhau. Khihọhoànthànhđoạn code củahọ, nhómquảnlýcấuhìnhrápchúnglạivớinhauvàchuẩnbịbiêndịch. Các tester cầnchắcrằngcác module nàybâygiờđãđượckếthợpvàlàmviệctheonhưyêucầu - tứclàphải test theonhưyêucầu).- Functional testing : làkiểu test liệumỗivàmọichứcnăngcủaứngdụngđóđanglàmviệccónhưyêucầucủatàiliệu. Nólàkiểu test chínhmà 80% côngviệc test đượcthựchiện. Trongkiểu test nàythìcáctestcaseđượcthựchiện (hoặcthihành).- System testing:Khi tester hoànthànhcôngviệc test (các tester test ứngdụngtrongcácmôitrường test, nghĩalàhọ test vớidữliệu test, không test trêndữliệuthật), ứngdụng (phầnmềm) phảiđược test trênmôitrườngthật. Nónghĩalàgì, tứclàkểtừkhicác tester test nótrongmôitrường test vớidữliệu test, chúng ta phảichắcchắnrằngứngdụnglàmviệctốttrongmôitrườngthậtvớidữliệuthật. Trongmôitrường test, mộtvàiđiềukhôngthể test hoặcthaotácgiả. Tấtcảsẽkhácnhauvàcơsởdữliệukhácnhau, mộtsốthaotáccóthểkhônglàmviệcnhưmongđợikhiứngdụngđượcchuyểntừmôitrường test sang môitrườngsảnphẩm (test enviroment to production environment).- Load testing ? Làkiểu test kiểmtrathờigianđáplạingườidùngvớiứngsốlượngngườidùngbấtkỳtrongmộtngữcảnhnàođócủacùngmộtứngdụngtạicùngmộtthờiđiểm.- Stress testing làgì? Làkiểu test kiểmtrathờigianđáplạingườidùngvớiứngsốlượngngườidùngbấtkỳtrongnhiềungữcảnhkhácnhaucủacùngmộtứngdụngtạicùngmộtthờiđiểm.- Performance testing làgì? Trongloại test này, ứngdụngđược test dựavàosứcnặngnhưsựphứctạpcủagiátrị, độdàicủađầuvào, độdàicủacáccâutruyvấn...Loại test nàykiểmtrabớtphầntải (stress/load) củaứngdụngcóthểđượcchắcchắnhơn.- User acceptance testing làgì? Trongkiểu test này, phầnmềmsẽđượcthựchiệnkiểmtratừngườidùngđểtìmranếuphầnmềmphùhợpvớisựmongđợicủangườidùngvàthựchiệnđúngnhưmongđợi. Tronggiaiđoạn test này, tester cóthểcũngthựchiệnhoặckháchhàngcócác tester củariênghọđểthựchiện.- Regression testing làgì? Khimộtchứcnăngmớiđượcthêmvàophầnmềm, chúng ta cầnchắcchắnrằngphầnchứcnăngmớiđượcthêmvàokhôngpháhỏngcácphầnkháccủaứngdụng. Hoặckhilỗiđãđượcchỉnhsửa, chúng ta cầnchắcchắnrằnglỗichỉnhsửakhôngpháhỏngcácphầnkháctrongứngdụng. Để test điềunàychúng ta thựchiệnkiểu test lặpđilặplạigọilà test hồiquy.
  3. Functional Testing: kiểmthửchứcnăng hay còngọikiểmthửhộpđen (blackbox)Black box làloại test mà tester đưagiátrịđầuvàovàkiểmtragiátrịđầurakhôngquantâmbêntronghoạtđộngnhưthếnào.Chủyếukiểmtragiaodiện, chứcnăngthiếu hay không, vv-Dựavàođặctảyêucầumàđưaracác test case: vìlàloại test chỉquan tam hệthốngphầnmềmcóhoạtđộngđúngnhưtrongyêucầu hay không, khôngquantâmbêntronglàmnhưthếnào-Chỉchútrọnghành vi bênngoàicủaphầnmềm.Structural Testing: kiểmthửcấutrúc hay còngọikiểmthửhộptrắng(white box)White box làloại test mà developer dựavàomã code củamìnhmàđưaracác test case.Test dựavàođiềukhiển logic (if else switch), điềukhiểnvònglặp (for while), cấutrúcdữliệubêntrongDựavàoviệcthựcthicủaphầnmềmmàđưaracác test caseChútrọngcấutrúcbêntrongcủaphầnmềm
  4. Giátrịđầuvào: 2 đồngxu, gõcâyđũa ma thuậtGiátrịđầura: con thỏBlack box: khángiả chi nhìnthấyảothuậtgiabỏ 2 đồngxu, vàgõcâyđũavàocáinón, và con thỏxuấthiệnWhite box: khinhậnđược 2 đồngxuvàthấycáinónbịgõ, ngườibêntrongđưa con thỏchoảothuậtgia
  5. Tiếntrìnhkiểmthử. Kiểmthửthườngbaogồmcácbước - Thiếtkếcáccakiểmthử - Bướctạodữliệuthử + Kiêmthửvớitấtcảcácdữliệuvàolàcầnthiết. + Chọntậpcácdữliệuthửđạidiệntừmiềndữliệuvào - Bướcthựcthichươngtrìnhtrêndữliệuthử + Cungcấpdữliệuthử + Thựcthi + Ghinhậnkếtquả - Bướcquansátkếtquảkiểmthử + Thựchiệntrongkhihoặcsaukhithựcthi + So sánhkếtquảnhậnđượcvàkếtquảmongđợi
  6. Unit testinglàphươngpháp test đơnvịcủa source code đểxácđịnh code đểcóhoạtđộngđúngnhưmongđợikhông.Một unit cóthểlàmột class hoặchàmcủachươngtrình
  7. Có 2 giaiđoạnchính:Trướckhi code hay còngọilàphươngpháp TDD(Test Driven Development: từviệc test dẫnđếnviết code để past test đó) - Tậptrungvàoyêucầucủachươngtrình - Nghĩđếnviệcviết code sẽđượcsửdụng - Ngưng code khiđạtđượcyêucầucủachươngtrình - KhókhănlúcbắtđầuSaukhi code xonghoặctronglúc code - Test chủyếuvàonhữngphầnđã code - Nghĩvềthuậttoánvà logic - Thayđổi code nhiềuhơn - Dễlúcbắtđầu
  8. - Code test phảiđộclập, cáchbiệtvới code được test - Code test phảingắngọn (khoảng 10 dòng), đơngiản, nhanhvàdễđọc. - Khôngsửdụngcáccấutrúcđiềukhiểnvàvònglặptronghàm test. Mỗicâulệnh if else nêntáchthànhnhiềuhàm test khácnhau, mỗihàmlà 1 trườnghợp test - Mộthàm test chỉnên test cho 1 trạngthái. VídụtestFormAcceptValidData
  9. PHPUnit là 1 framework viếtbằng PHP bởi Sebastian Bergmann.ThuộchọxUnit framework. xUnit frameworks: these unit testing frameworks are called the xUnit frameworks because their names usually start with the first letters of the language for which they were built.You might have CppUnit for C++, Junit for Java, Nunit for .NET.ĐượctíchhợpvàhỗtrợbởiZend Studio, Zend framework hay Symfony framework, doctrine
  10. Chạybằng command line: phpunitđườngdẫnđến file testChạybằng IDE: - Zend: trướchết import library vào project: Project -&gt; Properties -&gt; PHP Include Path -&gt; tab Libraries -&gt; click nút Add Library -&gt; chọn PHPUnit 3.x -&gt; OK. Đểchạynhấpchuộtphảilên file -&gt; Run As -&gt;PHPUnit, hiệnkhungkếtquảphpunit - NetBean: kiểmtraphpunitđãthêmvàochưa: Tool -&gt; Option -&gt; tab PHP -&gt; tab Unit Testing -&gt; kiểmtrađườngdẫncủaphpunit “/usr/bin/phpunit”Đểchạy file -&gt; Run -&gt; Test file -&gt; chỉthưmụcchứa file test -&gt; OKĐểchạy test suite: right click tên project -&gt; Properties -&gt; PHPUnit , chọn file bootstrap nếucó, chọn file configuration xml nếucó, chọn check box chạytấtcả file cótênlà Test -&gt; OKĐểhiện coverage report: right click tên project -&gt; Code Coverage -&gt; show reportChạybằng Continuous Integration (CI): tíchhợpliêntụcContinuous Intergration hay CI làmộtmôitrườnghỗtrợpháttriểnphầnmềmcóchứcnănggiúpcácthànhviêntrong team tíchhợp (integrate) côngviệccủahọmộtcáchthườngxuyên, liêntục. Mỗiđiểmtíchhợpsẽđượckiểmtra (verified) bởimột qui trình build và test tựđộngđểđảmbảopháthiệnsớmnhấtnhữnglỗiphátsinhtrongquátrìnhtíchhợpđó.Giảiphápnàythựcsựgiúpchocácnhàpháttriểnphầnmềmgiảmbớtcácvấnđềphátsinhtrongquátrìnhtíchhợpvàchophépcôngviệcpháttriểnphầntrởnênmềmnhanhchóngvàgắnkếthơn. CI baohàmmộtloạtnhữngquátrìnhđượcgắnkếtvớinhaunhư: automated build, coding standard check, static analysic, unit test, depoyingvàintergation test...
  11. Cácchứcnăngchínhcủaphpunit - Test dependency - Data provider - Exception - Fixture - Double - Code coverage
  12. Vớiviệc test thôngthường, để test 1 hàm, chúng ta truyềnvàothamsốsauđólấykếtquảtrảvề so sánhvớikếtquảchúng ta mongmuốn, sauđóxuất reportTest nhiềugiátrịđầuvào, viết code lậplạinhiềulần, mấtthờigianvìvậysửdụng data provider
  13. Data provider cungcấpdữliệuđể test. Dữliệunàycóthểlàgiátrịthamsốtruyềnvàohàmhoặcgiátrịmongmuốntrảvề, v.v
  14. Yêucầuđốivớiviệc test làcácthànhphầnphảiđược test riêngrẽvớinhauđểkếtquảcủathànhphầnkhôngbịảnhhưởngbởithànhphầnkhácvídụkhichúng ta gọiđến service đểlấykếtquảvàsauđólấykếtquảđểtínhtoántiếpchocôngviệccủachúng ta thìbắtbuộckếtquảtrảvềluônluônphảiđúngđểbiếtchắcnếu test củachúng ta bị fail là do code củachúng ta chứkhôngphải do service làmsai. Đểlàmđiềuđóđôikhichúng ta phảigiảlậpnhữngthànhphầnđóđểđảmbảo test đượccôlậpvàchínhxác. Việcgiảlập 1 đốitượngđượcgọilà test doubles.Ý tưởngcủa test double chỉgiảlập 1 phầncủa object, thườnglà 1 method nàođócần test chứkhônggiảlậptoànbộ object.Test double khôngphảithiếtkếmộtchotấtcảnêntùyvàotrườnghợpmàsửdụngcácloại double khácnhau. Test double cómấyloạisau:Dummy: là 1 object màđơngiảnđượcthông qua đểthỏamãncácphươngthứccầnkiểmtra. Nólà test double đơngiảnnhấtmàbạncóthểxâydựngStub cungcấpnhữngkếtquảđóngkhiđượcgọiSpy ghilạinhữnglầngọivàthamsốđểbạncóthểkiểmtrachúngsaunàybêntronghàm testMock giốngnhư Spy nhưngkiểmtralầngọingaylậptứcdựatheonhữnggìmàbạnđãđịnhnghĩatrướcđó. Nócũngcóthểcungcấpkếtquảđóng.Fake làsựthựcthimộtcáchđơngiảnnhấtcóthểcủamột object thậtchẳnghạnnhư DAO.Trongđóchúng ta chỉchú ý đặcbiệtđến Stub và Mock vìlà 2 đốitượngthườngdùng.Stub object làbảnsaocủamột object khácđượcchúng ta địnhnghĩatrướcvàtrảvề 1 kếtquảđóngcủamộtphươngthứctrong object đócũngđượcđịnhnghĩatrướcMock : điểmkhácnhaucănbảngiữa Stub và Mock là Mock khôngchỉgiảlập object màcònchokiểmtranhữnggìbạntruyềnchonóvàcáchbạngọinó.