SlideShare a Scribd company logo
Behavior-Driven Development
with Zend Framework 2

Zend Framework Day – Turin, Italy – 07/02/2014
DAVID CONTAVALLI

@mauipipe

2
CLEAN CODE ADEPT
BDD FANATIC

3
CLEAN CODE ADEPT
BDD FANATIC

4
WHAT IS BDD?
TDD Evolution

6
SAME RULES
1.

7

You are not allowed to write any production code
unless it is to make a failing unit test pass.
SAME RULES
1.

2.

8

You are not allowed to write any production code
unless it is to make a failing unit test pass.
You are not allowed to write any more of a unit test
than is sufficient to fail; and compilation failures are
failures.
SAME RULES
1.

2.

You are not allowed to write any more of a unit test
than is sufficient to fail; and compilation failures are
failures.

3.

9

You are not allowed to write any production code
unless it is to make a failing unit test pass.

You are not allowed to write any more production code
than is sufficient to pass the one failing unit test.
WHAT’S THE DIFFERENCE?
TDD STARTS FROM COMPONENTS
CREATE THE TEST
private $calculator;
function setUp(){
$this->calculator = new Calculator();
}
function testSumTwoPositive(){
$expectedResult = 8;
$result = $this->calculator(6,2);
assertEquals($expectedResult,$result);
}

12
13
WRITE QUICK, TEST VALIDATING CODE

class Calculator{
public function sum($num1, $num2){
return 8;
}
}

14
15
REFACTOR

class Calculator{
public function sum($num1, $num2){
$sum = $num1 + $num2;
return $sum;
}
}

16
17
BDD STARTS FROM AN EXAMPLE
SPECIFICATION BY EXAMPLE

Scenario: Add two number
Given I fill number1 field with 2
And I fill number2 field with 6
When I press Add button
Then the result should be 8

19
A COMMON LANGUAGE

STAKEHOLDER
20
A COMMON LANGUAGE

DEVELOPER
STAKEHOLDER
21
A COMMON LANGUAGE

DEVELOPER
STAKEHOLDER
22

USER
LIVING DOCUMENTATION
HOW IS STORY CODE RELATED?
GHERKIN

Scenario: Add two number
Given I fill number1 field with 2
And I fill number2 field with 6
When I press Add button
Then the result should be 8

25
Interpreted in many languages

26
GHERKIN

27
GHERKIN

28
WHAT IS BEHAT?
Scenario: Add two numbers
Given I fill number1 field with value of 2
TRANSLATE

/**
* @Given /^I fill ([^’’]*) with (d+)$/
**/
public function iFieldFieldWith($number, $fieldName)
{
throw new PendingException();
}
31
EXECUTION

32
USERS WILL NOT READ STORIES
THEY WILL USE AN UI
BROWSER
HOW TO TEST BROWSER WITH BEHAT?

36
HERE IT COMES, MINK!
GHERKIN

+

38
Web Acceptance Test

GOUTTE
• Headless Browser
• No Javascript
• Really fast

39
Web Acceptance Test

GOUTTE
• Headless Browser
• No Javascript
• Really fast

40

SELENIUM
• Can test Javascript
• Really slow
• Use Firefox as emulator
Web Acceptance Test

GOUTTE
• Headless Browser
• No Javascript
• Really fast

41

SELENIUM
• Can test Javascript
• Really slow
• Use Firefox as emulator
Zombie.js
• Can test Javascript
• Medium
• Use Firefox as emulator
Web Acceptance Test

GOUTTE
• Headless Browser
• No Javascript
• Really fast

42

SELENIUM
• Can test Javascript
• Really slow
• Use Firefox as emulator
Zombie.js
• Can test Javascript
• Medium
• Use Firefox as emulator

SAHI
• Can test Javascript
• slow
• Emulate every Browser
Scenario: Add two numbers
Given I fill number1 field with 2
And I fill number2 field with 6
When I press Add button
Then the result should be 8
/**
* @When /^I press ‘’(/[^’’]*)’’ button$/
**/
public function iPressButton($buttonName)
{
$this->pressButton($buttonName);
}

43
How to install....

+

44
"require-dev " :{
.........
"behat/behat" : "2.4.*@stable",
"behat/mink": "1.5.0",
"behat/mink-extension":"*",
"behat/mink-browserkit-driver":"dev-master",
"behat/mink-goutte-driver":"*",
"phpspec/phpspec":" 2.0.*@dev"
}
45
Differs from documentation
because there is a fix for ZF2
multicheckbox selection

"require-dev " :{
.........
"behat/behat" : "2.4.*@stable",
"behat/mink": "1.5.0",
"behat/mink-extension":"*",
"behat/mink-browserkit-driver":"dev-master",
"behat/mink-goutte-driver":"*",
"phpspec/phpspec":" 2.0.*@dev"
}
46
Mink Setup
behat.yml
default :
extensions :
BehatMinkExtensionExtension :
base_url : 'http://example.com'
goutte : ~

47
+
+
48
Static method
private static app;
/**
* @BeforeSuite
**/
public static function initializeZf(){
If(self::$zendApp === null){
$path = __DIR__ .’/../../config/application.config.php’;
self::app = ZendMvcApplication::init(require $path);
}
}
49
ZF2 EXTENSION
"require-dev":{
................
"mvlabs/zf2behat-extension":"dev-master"
},
51
Zf2 Behat Extension
behat.yml
default :
extensions :
MvLabsZf2ExtensionZf2Extension :
config : config/application.config.php
module :

52
Zf2 Behat Extension

run from console

bin/behat --init ‘’module name’’

53
Feature Context
Implements Zf2AwareContextInterface
class FeatureContext extends MinkContext implements
Zf2AwareContextInterface{
private $zf2MvcApplication;
.........
public function setZf2App(Application $zf2MvcApplication) {
$this->zf2MvcApplication = $zf2MvcApplication;
}

}

54
WE STILL NEED TO TEST
OUR COMPONENTS
GHERKIN

+

56
WHY PHPSPEC?

57
BDD BASED ON BEHAVIOUR
DESCRIPTION
Robert C. Martin
PHPUnit focus on testing code
private $calculator;

function setUp(){
$this->calculator = new Calculator();
}
function testSumTwoPositive(){
$expectedResult = 8;
$result = $this->calculator(6,2);
assertEquals($expectedResult,$result);
}
59
PHPSpec focus on code behavior
function let(){
$this->shouldBeConstructed();
}

function it_sum_two_positive_number(){
$this->sum(2,6)->shouldReturn(8);
}

60
Subject under Specification
"It’s this unexisting object, on which you’re
calling unexisting methods and assuming future
outcomes. Most important thing? There could
be only one SUS in specification"
Kostantin Kudryashov

61
Developer Tool Vs Testing Framework

62
Autogenerates classes & methods
bin/phpspec desc ‘’ApplicationControllerIndexController’’

63
PROMOTES CLEAN CODE
Demeter Law's Violation
function let(){
$this->shouldBeConstructed();
}
function it_sum_two_positive_number(){
$this->getPlayer()->getSword()->shouldBeInstanceOf(‘Sword’);
}

65
Impossible
function let(){
$this->shouldBeConstructed();
}
function it_sum_two_positive_number(){
$this->getPlayer()->getSword()->shouldBeInstanceOf(‘Sword’);
}

66
Add PHPSpec to Zf2

+

67
"require-dev":{
...........
"phpspec/phpspec" : "2.0.*@dev"
},
"config": {
"bin-dir": "bin/"
},
"autoload": {
"psr-0" {
"Application" : " module/Application/src"
}
}
68
Add a single module

’’require-dev’’:{
"require-dev":{
...........
...
"phpspec/phpspec" : "2.0.*@dev"
"phpspec/phpspec":" 2.0.*@dev"
},
},
"config": {
"config": {
"bin-dir": "bin/"
"bin-dir": "bin«
},
},
"autoload": { {
"autoload":
"psr-0" { {
"psr-0":
"Application" : " module/Application/src"
"Application": "module/Application/src"
} }
}}
69
Add more modules

"require-dev":{
...........
"phpspec/phpspec" : "2.0.*@dev"
},
"config": {
"bin-dir": "bin/"
},
"autoload": {
"psr-0" {
"Application" : " module/Application/src",
"Calculator" : "module/Calculator/src"
}
}
70
Create phpspec.yml in project root
formatter.name : progresssuites
Application:
namespace : Application
spec_prefix : Spec
src_path : 'module/Application/src/'
spec_path : 'module/Application/'
ModuleDemo:
namespace : ModuleDemo
spec_prefix : Spec
src_path : 'module/ModuleDemo/src/'
spec_path : 'module/ModuleDemo/'
71
What to test with PHPSpec?

72
What to test with PHPSpec?
1.Model Logic

73
What to test with PHPSpec?
1.Model Logic
2.Factories

74
What to test with PHPSpec?
1.Model Logic
2.Factories

3.Validation

75
Behat bad practices
1. Verbose Stories

2. Using Mink to test REST calls
3. Testing every possible usages combination
4. Fixture loading within Context

76
WHY TESTING?
IT’S A TREND
RELAX
SOMEONE WILL READ YOUR CODE
IT COULD BE YOU SOME DAY
YOUR COLLEAGUES
OR
84
A VIOLENT PSYCHOPATH WHO
KNOWS WHERE YOU LIVE
Thank you for your attention

David Contavalli
@mauipipe
QUESTIONS?
@mauipipe
mauipipe@gmail.com
Some readings

90
Credits
https://www.flickr.com/photos/42788859@N00/318947873
https://www.flickr.com/photos/79811974@N08/8895959339/
https://www.flickr.com/photos/wingedwolf/5471047557/
https://www.flickr.com/photos/21112928@N07/2922128673/
https://www.flickr.com/photos/23408922@N07/8220573257/
https://www.flickr.com/photos/11956371@N07/4146284063/
http://www.flickr.com/photos/chemicalbrother/2540855983/
http://www.flickr.com/photos/slworking/5757370044/
http://www.flickr.com/photos/ter-burg/5807937726/
http://www.flickr.com/photos/thyagohills/5023536434/
http://www.flickr.com/photos/jeremybrooks/2175042537/
http://www.flickr.com/photos/bowmanlibrary/941844481/
http://www.flickr.com/photos/webhamster/2476756607/
http://www.flickr.com/photos/nebirdsplus/5835963068/
http://www.flickr.com/photos/mistaboos/4348381987/
http://www.flickr.com/photos/moofbong/4207382992/
http://www.flickr.com/photos/ryanh/43936630/
http://www.flickr.com/photos/nathangibbs/98592171/
http://www.flickr.com/photos/71894657@N00/2553948289/
http://www.flickr.com/photos/ahia/3168219760/
http://www.flickr.com/photos/smileham/3559228586/
http://www.flickr.com/photos/kk/3834592792/
http://www.flickr.com/photos/enoughproject/5776533975/
http://www.flickr.com/photos/_flood_/8067625282/
http://www.flickr.com/photos/drooo/3114233333/
http://www.flickr.com/photos/84143785@N00/3559757811

91
David Contavalli
@mauipipe

More Related Content

What's hot

PuppetConf 2016: Deploying Multi-Tier Windows Applications with Application O...
PuppetConf 2016: Deploying Multi-Tier Windows Applications with Application O...PuppetConf 2016: Deploying Multi-Tier Windows Applications with Application O...
PuppetConf 2016: Deploying Multi-Tier Windows Applications with Application O...
Puppet
 
Droidcon ES '16 - How to fail going offline
Droidcon ES '16 - How to fail going offlineDroidcon ES '16 - How to fail going offline
Droidcon ES '16 - How to fail going offline
Javier de Pedro López
 
The Screenplay Pattern: Better Interactions for Better Automation
The Screenplay Pattern: Better Interactions for Better AutomationThe Screenplay Pattern: Better Interactions for Better Automation
The Screenplay Pattern: Better Interactions for Better Automation
Applitools
 
Quickly Testing Qt Desktop Applications
Quickly Testing Qt Desktop ApplicationsQuickly Testing Qt Desktop Applications
Quickly Testing Qt Desktop Applications
Clare Macrae
 
vJUG - The JavaFX Ecosystem
vJUG - The JavaFX EcosystemvJUG - The JavaFX Ecosystem
vJUG - The JavaFX Ecosystem
Andres Almiray
 
Idiomatic gradle plugin writing
Idiomatic gradle plugin writingIdiomatic gradle plugin writing
Idiomatic gradle plugin writing
Schalk Cronjé
 
Basic Gradle Plugin Writing
Basic Gradle Plugin WritingBasic Gradle Plugin Writing
Basic Gradle Plugin Writing
Schalk Cronjé
 
Living With Legacy Code
Living With Legacy CodeLiving With Legacy Code
Living With Legacy Code
Rowan Merewood
 
3 Ways to test your ColdFusion API - 2017 Adobe CF Summit
3 Ways to test your ColdFusion API - 2017 Adobe CF Summit3 Ways to test your ColdFusion API - 2017 Adobe CF Summit
3 Ways to test your ColdFusion API - 2017 Adobe CF Summit
Ortus Solutions, Corp
 
"Applied Enterprise Metaprogramming in JavaScript", Vladyslav Dukhin
"Applied Enterprise Metaprogramming in JavaScript", Vladyslav Dukhin"Applied Enterprise Metaprogramming in JavaScript", Vladyslav Dukhin
"Applied Enterprise Metaprogramming in JavaScript", Vladyslav Dukhin
Fwdays
 
Architecting your GWT applications with GWT-Platform - Lesson 02
Architecting your GWT applications with GWT-Platform - Lesson 02Architecting your GWT applications with GWT-Platform - Lesson 02
Architecting your GWT applications with GWT-Platform - Lesson 02
rhemsolutions
 
Legacy Dependency Kata v2.0
Legacy Dependency Kata v2.0Legacy Dependency Kata v2.0
Legacy Dependency Kata v2.0
William Munn
 
Legacy Code Kata v3.0
Legacy Code Kata v3.0Legacy Code Kata v3.0
Legacy Code Kata v3.0
William Munn
 
Test-Driven Development in React with Cypress
Test-Driven Development in React with CypressTest-Driven Development in React with Cypress
Test-Driven Development in React with Cypress
Josh Justice
 
Супер быстрая автоматизация тестирования на iOS
Супер быстрая автоматизация тестирования на iOSСупер быстрая автоматизация тестирования на iOS
Супер быстрая автоматизация тестирования на iOS
SQALab
 
Jenkins Evolutions - JEEConf 2012
Jenkins Evolutions - JEEConf 2012Jenkins Evolutions - JEEConf 2012
Jenkins Evolutions - JEEConf 2012
Anton Arhipov
 
One commit, one release. Continuously delivering a Symfony project.
One commit, one release. Continuously delivering a Symfony project.One commit, one release. Continuously delivering a Symfony project.
One commit, one release. Continuously delivering a Symfony project.
Javier López
 
Continous Delivering a PHP application
Continous Delivering a PHP applicationContinous Delivering a PHP application
Continous Delivering a PHP application
Javier López
 
OpenDaylight Developer Experience 2.0
 OpenDaylight Developer Experience 2.0 OpenDaylight Developer Experience 2.0
OpenDaylight Developer Experience 2.0
Michael Vorburger
 
Gradle 3.0: Unleash the Daemon!
Gradle 3.0: Unleash the Daemon!Gradle 3.0: Unleash the Daemon!
Gradle 3.0: Unleash the Daemon!
Eric Wendelin
 

What's hot (20)

PuppetConf 2016: Deploying Multi-Tier Windows Applications with Application O...
PuppetConf 2016: Deploying Multi-Tier Windows Applications with Application O...PuppetConf 2016: Deploying Multi-Tier Windows Applications with Application O...
PuppetConf 2016: Deploying Multi-Tier Windows Applications with Application O...
 
Droidcon ES '16 - How to fail going offline
Droidcon ES '16 - How to fail going offlineDroidcon ES '16 - How to fail going offline
Droidcon ES '16 - How to fail going offline
 
The Screenplay Pattern: Better Interactions for Better Automation
The Screenplay Pattern: Better Interactions for Better AutomationThe Screenplay Pattern: Better Interactions for Better Automation
The Screenplay Pattern: Better Interactions for Better Automation
 
Quickly Testing Qt Desktop Applications
Quickly Testing Qt Desktop ApplicationsQuickly Testing Qt Desktop Applications
Quickly Testing Qt Desktop Applications
 
vJUG - The JavaFX Ecosystem
vJUG - The JavaFX EcosystemvJUG - The JavaFX Ecosystem
vJUG - The JavaFX Ecosystem
 
Idiomatic gradle plugin writing
Idiomatic gradle plugin writingIdiomatic gradle plugin writing
Idiomatic gradle plugin writing
 
Basic Gradle Plugin Writing
Basic Gradle Plugin WritingBasic Gradle Plugin Writing
Basic Gradle Plugin Writing
 
Living With Legacy Code
Living With Legacy CodeLiving With Legacy Code
Living With Legacy Code
 
3 Ways to test your ColdFusion API - 2017 Adobe CF Summit
3 Ways to test your ColdFusion API - 2017 Adobe CF Summit3 Ways to test your ColdFusion API - 2017 Adobe CF Summit
3 Ways to test your ColdFusion API - 2017 Adobe CF Summit
 
"Applied Enterprise Metaprogramming in JavaScript", Vladyslav Dukhin
"Applied Enterprise Metaprogramming in JavaScript", Vladyslav Dukhin"Applied Enterprise Metaprogramming in JavaScript", Vladyslav Dukhin
"Applied Enterprise Metaprogramming in JavaScript", Vladyslav Dukhin
 
Architecting your GWT applications with GWT-Platform - Lesson 02
Architecting your GWT applications with GWT-Platform - Lesson 02Architecting your GWT applications with GWT-Platform - Lesson 02
Architecting your GWT applications with GWT-Platform - Lesson 02
 
Legacy Dependency Kata v2.0
Legacy Dependency Kata v2.0Legacy Dependency Kata v2.0
Legacy Dependency Kata v2.0
 
Legacy Code Kata v3.0
Legacy Code Kata v3.0Legacy Code Kata v3.0
Legacy Code Kata v3.0
 
Test-Driven Development in React with Cypress
Test-Driven Development in React with CypressTest-Driven Development in React with Cypress
Test-Driven Development in React with Cypress
 
Супер быстрая автоматизация тестирования на iOS
Супер быстрая автоматизация тестирования на iOSСупер быстрая автоматизация тестирования на iOS
Супер быстрая автоматизация тестирования на iOS
 
Jenkins Evolutions - JEEConf 2012
Jenkins Evolutions - JEEConf 2012Jenkins Evolutions - JEEConf 2012
Jenkins Evolutions - JEEConf 2012
 
One commit, one release. Continuously delivering a Symfony project.
One commit, one release. Continuously delivering a Symfony project.One commit, one release. Continuously delivering a Symfony project.
One commit, one release. Continuously delivering a Symfony project.
 
Continous Delivering a PHP application
Continous Delivering a PHP applicationContinous Delivering a PHP application
Continous Delivering a PHP application
 
OpenDaylight Developer Experience 2.0
 OpenDaylight Developer Experience 2.0 OpenDaylight Developer Experience 2.0
OpenDaylight Developer Experience 2.0
 
Gradle 3.0: Unleash the Daemon!
Gradle 3.0: Unleash the Daemon!Gradle 3.0: Unleash the Daemon!
Gradle 3.0: Unleash the Daemon!
 

Similar to Behavioural Driven Development in Zf2

Let your tests drive your code
Let your tests drive your codeLet your tests drive your code
Let your tests drive your code
Michelangelo van Dam
 
3 WAYS TO TEST YOUR COLDFUSION API
3 WAYS TO TEST YOUR COLDFUSION API3 WAYS TO TEST YOUR COLDFUSION API
3 WAYS TO TEST YOUR COLDFUSION API
Gavin Pickin
 
3 WAYS TO TEST YOUR COLDFUSION API -
3 WAYS TO TEST YOUR COLDFUSION API - 3 WAYS TO TEST YOUR COLDFUSION API -
3 WAYS TO TEST YOUR COLDFUSION API -
Ortus Solutions, Corp
 
Testing of javacript
Testing of javacriptTesting of javacript
Testing of javacript
Lei Kang
 
Real world Webapp
Real world WebappReal world Webapp
Real world Webapp
Things Lab
 
Tdd is not about testing (OOP)
Tdd is not about testing (OOP)Tdd is not about testing (OOP)
Tdd is not about testing (OOP)
Gianluca Padovani
 
Getting started with TDD - Confoo 2014
Getting started with TDD - Confoo 2014Getting started with TDD - Confoo 2014
Getting started with TDD - Confoo 2014
Eric Hogue
 
Quality assurance for php projects with PHPStorm
Quality assurance for php projects with PHPStormQuality assurance for php projects with PHPStorm
Quality assurance for php projects with PHPStorm
Michelangelo van Dam
 
Stopping the Rot - Putting Legacy C++ Under Test
Stopping the Rot - Putting Legacy C++ Under TestStopping the Rot - Putting Legacy C++ Under Test
Stopping the Rot - Putting Legacy C++ Under Test
Seb Rose
 
(automatic) Testing: from business to university and back
(automatic) Testing: from business to university and back(automatic) Testing: from business to university and back
(automatic) Testing: from business to university and back
David Rodenas
 
Tdd is not about testing (C++ version)
Tdd is not about testing (C++ version)Tdd is not about testing (C++ version)
Tdd is not about testing (C++ version)
Gianluca Padovani
 
Increase testability with code seams
Increase testability with code seamsIncrease testability with code seams
Increase testability with code seams
Llewellyn Falco
 
GlobalLogic Test Automation Online TechTalk “Test Driven Development as a Per...
GlobalLogic Test Automation Online TechTalk “Test Driven Development as a Per...GlobalLogic Test Automation Online TechTalk “Test Driven Development as a Per...
GlobalLogic Test Automation Online TechTalk “Test Driven Development as a Per...
GlobalLogic Ukraine
 
Coding Naked 2023
Coding Naked 2023Coding Naked 2023
Coding Naked 2023
Caleb Jenkins
 
不只自動化而且更敏捷的Android開發工具 gradle mopcon
不只自動化而且更敏捷的Android開發工具 gradle mopcon不只自動化而且更敏捷的Android開發工具 gradle mopcon
不只自動化而且更敏捷的Android開發工具 gradle mopcon
sam chiu
 
Joomla! Day Chicago 2011 Presentation - Steven Pignataro
Joomla! Day Chicago 2011 Presentation - Steven PignataroJoomla! Day Chicago 2011 Presentation - Steven Pignataro
Joomla! Day Chicago 2011 Presentation - Steven Pignataro
Steven Pignataro
 
Agile mobile
Agile mobileAgile mobile
Agile mobile
Godfrey Nolan
 
Up and Running with Angular
Up and Running with AngularUp and Running with Angular
Up and Running with Angular
Justin James
 
Commencer avec le TDD
Commencer avec le TDDCommencer avec le TDD
Commencer avec le TDD
Eric Hogue
 
Codeception introduction and use in Yii
Codeception introduction and use in YiiCodeception introduction and use in Yii
Codeception introduction and use in Yii
IlPeach
 

Similar to Behavioural Driven Development in Zf2 (20)

Let your tests drive your code
Let your tests drive your codeLet your tests drive your code
Let your tests drive your code
 
3 WAYS TO TEST YOUR COLDFUSION API
3 WAYS TO TEST YOUR COLDFUSION API3 WAYS TO TEST YOUR COLDFUSION API
3 WAYS TO TEST YOUR COLDFUSION API
 
3 WAYS TO TEST YOUR COLDFUSION API -
3 WAYS TO TEST YOUR COLDFUSION API - 3 WAYS TO TEST YOUR COLDFUSION API -
3 WAYS TO TEST YOUR COLDFUSION API -
 
Testing of javacript
Testing of javacriptTesting of javacript
Testing of javacript
 
Real world Webapp
Real world WebappReal world Webapp
Real world Webapp
 
Tdd is not about testing (OOP)
Tdd is not about testing (OOP)Tdd is not about testing (OOP)
Tdd is not about testing (OOP)
 
Getting started with TDD - Confoo 2014
Getting started with TDD - Confoo 2014Getting started with TDD - Confoo 2014
Getting started with TDD - Confoo 2014
 
Quality assurance for php projects with PHPStorm
Quality assurance for php projects with PHPStormQuality assurance for php projects with PHPStorm
Quality assurance for php projects with PHPStorm
 
Stopping the Rot - Putting Legacy C++ Under Test
Stopping the Rot - Putting Legacy C++ Under TestStopping the Rot - Putting Legacy C++ Under Test
Stopping the Rot - Putting Legacy C++ Under Test
 
(automatic) Testing: from business to university and back
(automatic) Testing: from business to university and back(automatic) Testing: from business to university and back
(automatic) Testing: from business to university and back
 
Tdd is not about testing (C++ version)
Tdd is not about testing (C++ version)Tdd is not about testing (C++ version)
Tdd is not about testing (C++ version)
 
Increase testability with code seams
Increase testability with code seamsIncrease testability with code seams
Increase testability with code seams
 
GlobalLogic Test Automation Online TechTalk “Test Driven Development as a Per...
GlobalLogic Test Automation Online TechTalk “Test Driven Development as a Per...GlobalLogic Test Automation Online TechTalk “Test Driven Development as a Per...
GlobalLogic Test Automation Online TechTalk “Test Driven Development as a Per...
 
Coding Naked 2023
Coding Naked 2023Coding Naked 2023
Coding Naked 2023
 
不只自動化而且更敏捷的Android開發工具 gradle mopcon
不只自動化而且更敏捷的Android開發工具 gradle mopcon不只自動化而且更敏捷的Android開發工具 gradle mopcon
不只自動化而且更敏捷的Android開發工具 gradle mopcon
 
Joomla! Day Chicago 2011 Presentation - Steven Pignataro
Joomla! Day Chicago 2011 Presentation - Steven PignataroJoomla! Day Chicago 2011 Presentation - Steven Pignataro
Joomla! Day Chicago 2011 Presentation - Steven Pignataro
 
Agile mobile
Agile mobileAgile mobile
Agile mobile
 
Up and Running with Angular
Up and Running with AngularUp and Running with Angular
Up and Running with Angular
 
Commencer avec le TDD
Commencer avec le TDDCommencer avec le TDD
Commencer avec le TDD
 
Codeception introduction and use in Yii
Codeception introduction and use in YiiCodeception introduction and use in Yii
Codeception introduction and use in Yii
 

Recently uploaded

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
 
Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024
Jason Packer
 
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Jeffrey Haguewood
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
panagenda
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
danishmna97
 
Serial Arm Control in Real Time Presentation
Serial Arm Control in Real Time PresentationSerial Arm Control in Real Time Presentation
Serial Arm Control in Real Time Presentation
tolgahangng
 
June Patch Tuesday
June Patch TuesdayJune Patch Tuesday
June Patch Tuesday
Ivanti
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
Zilliz
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
名前 です男
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Safe Software
 
Skybuffer SAM4U tool for SAP license adoption
Skybuffer SAM4U tool for SAP license adoptionSkybuffer SAM4U tool for SAP license adoption
Skybuffer SAM4U tool for SAP license adoption
Tatiana Kojar
 
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptxOcean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
SitimaJohn
 
Energy Efficient Video Encoding for Cloud and Edge Computing Instances
Energy Efficient Video Encoding for Cloud and Edge Computing InstancesEnergy Efficient Video Encoding for Cloud and Edge Computing Instances
Energy Efficient Video Encoding for Cloud and Edge Computing Instances
Alpen-Adria-Universität
 
Digital Marketing Trends in 2024 | Guide for Staying Ahead
Digital Marketing Trends in 2024 | Guide for Staying AheadDigital Marketing Trends in 2024 | Guide for Staying Ahead
Digital Marketing Trends in 2024 | Guide for Staying Ahead
Wask
 
Project Management Semester Long Project - Acuity
Project Management Semester Long Project - AcuityProject Management Semester Long Project - Acuity
Project Management Semester Long Project - Acuity
jpupo2018
 
Monitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdfMonitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdf
Tosin Akinosho
 
OpenID AuthZEN Interop Read Out - Authorization
OpenID AuthZEN Interop Read Out - AuthorizationOpenID AuthZEN Interop Read Out - Authorization
OpenID AuthZEN Interop Read Out - Authorization
David Brossard
 
UI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentationUI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentation
Wouter Lemaire
 
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceAI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
IndexBug
 
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
saastr
 

Recently uploaded (20)

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)
 
Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024
 
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
 
Serial Arm Control in Real Time Presentation
Serial Arm Control in Real Time PresentationSerial Arm Control in Real Time Presentation
Serial Arm Control in Real Time Presentation
 
June Patch Tuesday
June Patch TuesdayJune Patch Tuesday
June Patch Tuesday
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
 
Skybuffer SAM4U tool for SAP license adoption
Skybuffer SAM4U tool for SAP license adoptionSkybuffer SAM4U tool for SAP license adoption
Skybuffer SAM4U tool for SAP license adoption
 
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptxOcean lotus Threat actors project by John Sitima 2024 (1).pptx
Ocean lotus Threat actors project by John Sitima 2024 (1).pptx
 
Energy Efficient Video Encoding for Cloud and Edge Computing Instances
Energy Efficient Video Encoding for Cloud and Edge Computing InstancesEnergy Efficient Video Encoding for Cloud and Edge Computing Instances
Energy Efficient Video Encoding for Cloud and Edge Computing Instances
 
Digital Marketing Trends in 2024 | Guide for Staying Ahead
Digital Marketing Trends in 2024 | Guide for Staying AheadDigital Marketing Trends in 2024 | Guide for Staying Ahead
Digital Marketing Trends in 2024 | Guide for Staying Ahead
 
Project Management Semester Long Project - Acuity
Project Management Semester Long Project - AcuityProject Management Semester Long Project - Acuity
Project Management Semester Long Project - Acuity
 
Monitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdfMonitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdf
 
OpenID AuthZEN Interop Read Out - Authorization
OpenID AuthZEN Interop Read Out - AuthorizationOpenID AuthZEN Interop Read Out - Authorization
OpenID AuthZEN Interop Read Out - Authorization
 
UI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentationUI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentation
 
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceAI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
 
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
 

Behavioural Driven Development in Zf2