SlideShare a Scribd company logo
1 of 44
Download to read offline
Plone Testing
DZUG Tagung Dresden 2010
       Timo Stollenwerk
Timo Stollenwerk
●   Plone Entwickler seit 2004
●   GSoC 2009: plone.app.discussion
    ●   ~ 120 Tests
    ●   Python und Javascript
    ●   Code Analysis (Pylint, ZPTLint, JSLint)
    ●   Code Coverage
    ●   Continuous Integration
Material
●   Folien:
    ●   slideshare.net/tisto
●   Code:
    ●   svn.plone.org/svn/collective/examples/example.dzu
        gconference/example.dzugconference
Was ist ein Test?
Test Beispiel
def is_palindrome(word):
  pass


def test_palindromic_word():
  assert is_palindrome("noon") == True
  assert is_palindrome("foo") == False
Python Unittest Testcase
import unittest
class TestIsPalindrome(unittest.TestCase):


   def test_palindromic_word():
       self.assertEquals(is_palindrome("noon"), True)
       self.failIf(is_palindrome("foo"))


   def test_non_string_raises_exception():
       self.UnlessRaises(TypeError, is_palindrome, 2)


http://docs.python.org/library/unittest.html
Warum sind Tests wichtig?
Warum Testen?
●   Robusterer Code
●   Besseres Code Verständnis
●   Nachweis
●   Dokumentation von Software Anforderungen
●   „Billigeres“ Bugfixing
●   Refactoring
Was ist Test-Driven Development?
Test-Driven Development




Kent Beck: Test Driven Development
Arten von Tests
Funktionale Tests
●   Funktionaler Ablauf
●   Benutzersicht
●   BlackBox Testing
●   Akzeptanztests
XP/Scrum und Funktionale Tests
●   Abbildung von (Software) Anforderungen durch
    User Stories / Acceptance Tests
●   Testbare Spezifikation
●   Code der die Tests besteht
●   => Beweist das die Software tut was sie soll
User Stories mit (Doc)Tests
As a logged-in user, I can add a new page to the
website.
Beispiel Funktionaler Doctest
>>> browser.open(portal_url)


>>> browser.getLink(id='example-dzugconference-
presenter').click()


>>> browser.getControl(name='form.widgets.title').value =
"Presenter 1"


>>> browser.getControl(name='form.buttons.save').click()


Plone SVN: plone.app.discussion/.../presenter.txt
zope.testbrowser
●   browser.open('http://nohost/plone/')
●   browser.getLink(link_text).click()
●   browser.url
●   browser.reload()
●   browser.getControl(input_name).value =
    ‘Whatever’
●   browser.getControl(name='form.buttons.save').
    click()

http://pypi.python.org/pypi/zope.testbrowser
zope.testbrowser debugging
open('/tmp/testbrowser.html','w').write(browser.co
ntents)
Interlude (Interaktives Debugging)
import interlude
suite = DocFileSuite(...,
     globs={'interact': interlude.interact},
...)


>>> interact( locals() )



http://pypi.python.org/pypi/interlude/
Testing Pyramide
Integrationstests
●   Testet die Zusammenarbeit voneinander
    abhängiger Komponenten
Beispiel Integrationstest
class IPresenter(form.Schema):


  title = schema.TextLine(
             title=_(u"Title")
        )


  ...
Was wollen wir testen?
●   Schema
●   Typ Registrierung (FTI)
●   Factory
●   Hinzufügen des Inhaltstyps
●   View
Integrationstests: setUp
def setUp(self):


  self.portal = self.layer['portal']


  setRoles(self.portal, TEST_USER_NAME, ['Manager'])
  self.portal.invokeFactory('Folder', 'test-folder')
  setRoles(self.portal, TEST_USER_NAME, ['Member'])


  self.folder = self.portal['test-folder']
Integrationstest: Schema
def test_schema(self):


  fti = queryUtility(IDexterityFTI,
    name='example.dzugconference.presenter')
  schema = fti.lookupSchema()


  self.assertEquals(IPresenter, schema)
Integrationstest: FTI
def test_fti(self):


  fti = queryUtility(IDexterityFTI,
     name='example.dzugconference.presenter')


  self.assertNotEquals(None, fti)
Integrationstest: Factory
def test_factory(self):


  fti = queryUtility(IDexterityFTI,
     name='example.dzugconference.presenter')
  factory = fti.factory
  new_object = createObject(factory)


  self.failUnless(
     IPresenter.providedBy(new_object))
Integrationstest: Hinzufügen
def test_adding(self):


  self.folder.invokeFactory(
     'example.dzugconference.presenter',
     'presenter1')
  p1 = self.folder['presenter1']


  self.failUnless(IPresenter.providedBy(p1))
Integrationstest: View
def test_view(self):


  self.folder.invokeFactory(
     'example.dzugconference.presenter',
     'presenter1')
  p1 = self.folder['presenter1']
  view = p1.restrictedTraverse('@@view')


  self.failUnless(view)
Integrationstest: Debugging
def test_todo(self):


  import pdb; pdb.set_trace()


  import ipdb; ipdb.set_trace()
Testing Pyramide
Unit Tests in Plone
●   Test einer isolierten Komponente
●   Wie?
●   => Mock Objects
Mock und Fake Objekte
 ●   Externe Datenbanken
 ●   Web Services
 ●   Plone Komponenten
 ●   Netzwerkverbindungen
 ●   Benötigen externe Komponenten




http://plone.org/products/dexterity/documentation/manual/developer-manual/testing/mock-testing

http://pypi.python.org/pypi/plone.mocktestcase
Setup Tests
●   Professional Plone Development
●   Layer / collective.testcaselayer
●   plone.testing / plone.app.testing
Test Setup (PPD)
TestPortlet(CinemaContentTestCase):


    def afterSetUp(self):
          …


    ...



PPD: Optilux Code Examples
Test Setup (Layer)
class CommentTest(PloneTestCase):
    layer = DiscussionLayer


    def afterSetUp(self):
         …


   ...


http://svn.plone.org/svn/plone/plone.app.discussion/trunk
Test Setup (plone.testing)
class
ExampleDzugConference(PloneSandboxLayer):
    defaultBases = (PLONE_FIXTURE,)


    def setUpPloneSite(self, portal):
          …


    ...

Collective SVN: examples/examples.dzugconference
Testrunner
parts += test


[test]
recipe = zc.recipe.testrunner
eggs = ${instance:eggs}
defaults = ['--auto-color', '--auto-progress']
Test Geschwindigkeit
Integrations-Tests vs. Funktionale Tests

●   plone.app.discussion
    ●   Test Setup (Plone Site): 9,5 Sekunden
    ●   116 Integrationstests: 15 Sekunden      (+ 6,5)
    ●   1 Funktionaler Test:   21.5 Sekunden (+ 12,0)
Testing Pyramide
Test Abdeckung
buildout.cfg



[coverage-test]
recipe = zc.recipe.testrunner
eggs = ${test:eggs}
defaults = ['--coverage', '../../coverage', '-v', '--auto-progress']


[coverage-report]
recipe = zc.recipe.egg
eggs = z3c.coverage
arguments = ('coverage', 'report')
Hudson Continuous Integration




http://hudson.zmag.de/hudson
Weitere Tests
 ●   Python
      ●   Pylint
 ●   Templates
      ●   ZPTLint
 ●   Javascript
      ●   JSLint
      ●   qUnit



svn.plone.org/svn/plone/plone.app.discussion/trunk/test-plone-4.0.x.cfg
Weiterführendes Material
●   Kent Beck: Test Driven Development
●   Python Testing: Beginner's Guide
●   Tarek Ziadé: Expert Python Programming
●   Testing in Plone:
    http://plone.org/documentation/kb/testing
●   Dexterity Manual - Testing:
    http://plone.org/products/dexterity/documentatio
    n/manual/developer-manual/testing
Fragen?

More Related Content

What's hot

Presentation_C++UnitTest
Presentation_C++UnitTestPresentation_C++UnitTest
Presentation_C++UnitTestRaihan Masud
 
Writing good unit test
Writing good unit testWriting good unit test
Writing good unit testLucy Lu
 
Test all the things! Automated testing with Drupal 8
Test all the things! Automated testing with Drupal 8Test all the things! Automated testing with Drupal 8
Test all the things! Automated testing with Drupal 8Sam Becker
 
Automated testing in Python and beyond
Automated testing in Python and beyondAutomated testing in Python and beyond
Automated testing in Python and beyonddn
 
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 TestSeb Rose
 
TDD in Python With Pytest
TDD in Python With PytestTDD in Python With Pytest
TDD in Python With PytestEddy Reyes
 
Oh so you test? - A guide to testing on Android from Unit to Mutation
Oh so you test? - A guide to testing on Android from Unit to MutationOh so you test? - A guide to testing on Android from Unit to Mutation
Oh so you test? - A guide to testing on Android from Unit to MutationPaul Blundell
 
Unit testing presentation
Unit testing presentationUnit testing presentation
Unit testing presentationArthur Freyman
 
Grails unit testing
Grails unit testingGrails unit testing
Grails unit testingpleeps
 
20111018 boost and gtest
20111018 boost and gtest20111018 boost and gtest
20111018 boost and gtestWill Shen
 
How to test models using php unit testing framework?
How to test models using php unit testing framework?How to test models using php unit testing framework?
How to test models using php unit testing framework?satejsahu
 
Automated Unit Testing
Automated Unit TestingAutomated Unit Testing
Automated Unit TestingMike Lively
 
Automation testing with Drupal 8
Automation testing with Drupal 8Automation testing with Drupal 8
Automation testing with Drupal 8nagpalprachi
 
Google C++ Testing Framework in Visual Studio 2008
Google C++ Testing Framework in Visual Studio 2008Google C++ Testing Framework in Visual Studio 2008
Google C++ Testing Framework in Visual Studio 2008Andrea Francia
 
Getting Started with Test-Driven Development at Midwest PHP 2021
Getting Started with Test-Driven Development at Midwest PHP 2021Getting Started with Test-Driven Development at Midwest PHP 2021
Getting Started with Test-Driven Development at Midwest PHP 2021Scott Keck-Warren
 

What's hot (20)

Presentation_C++UnitTest
Presentation_C++UnitTestPresentation_C++UnitTest
Presentation_C++UnitTest
 
Writing good unit test
Writing good unit testWriting good unit test
Writing good unit test
 
Test all the things! Automated testing with Drupal 8
Test all the things! Automated testing with Drupal 8Test all the things! Automated testing with Drupal 8
Test all the things! Automated testing with Drupal 8
 
Automated testing in Python and beyond
Automated testing in Python and beyondAutomated testing in Python and beyond
Automated testing in Python and beyond
 
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
 
TDD in Python With Pytest
TDD in Python With PytestTDD in Python With Pytest
TDD in Python With Pytest
 
Oh so you test? - A guide to testing on Android from Unit to Mutation
Oh so you test? - A guide to testing on Android from Unit to MutationOh so you test? - A guide to testing on Android from Unit to Mutation
Oh so you test? - A guide to testing on Android from Unit to Mutation
 
Unit testing presentation
Unit testing presentationUnit testing presentation
Unit testing presentation
 
Grails unit testing
Grails unit testingGrails unit testing
Grails unit testing
 
20111018 boost and gtest
20111018 boost and gtest20111018 boost and gtest
20111018 boost and gtest
 
How to test models using php unit testing framework?
How to test models using php unit testing framework?How to test models using php unit testing framework?
How to test models using php unit testing framework?
 
Django Testing
Django TestingDjango Testing
Django Testing
 
Grails Spock Testing
Grails Spock TestingGrails Spock Testing
Grails Spock Testing
 
Unit test-using-spock in Grails
Unit test-using-spock in GrailsUnit test-using-spock in Grails
Unit test-using-spock in Grails
 
PHP Unit Testing
PHP Unit TestingPHP Unit Testing
PHP Unit Testing
 
Automated Unit Testing
Automated Unit TestingAutomated Unit Testing
Automated Unit Testing
 
Testing In Java
Testing In JavaTesting In Java
Testing In Java
 
Automation testing with Drupal 8
Automation testing with Drupal 8Automation testing with Drupal 8
Automation testing with Drupal 8
 
Google C++ Testing Framework in Visual Studio 2008
Google C++ Testing Framework in Visual Studio 2008Google C++ Testing Framework in Visual Studio 2008
Google C++ Testing Framework in Visual Studio 2008
 
Getting Started with Test-Driven Development at Midwest PHP 2021
Getting Started with Test-Driven Development at Midwest PHP 2021Getting Started with Test-Driven Development at Midwest PHP 2021
Getting Started with Test-Driven Development at Midwest PHP 2021
 

Viewers also liked

Plone i18n, LinguaPlone
Plone i18n, LinguaPlonePlone i18n, LinguaPlone
Plone i18n, LinguaPloneQuintagroup
 
'Wicked' Policy Challenges: Tools, Strategies and Directions for Driving Ment...
'Wicked' Policy Challenges: Tools, Strategies and Directions for Driving Ment...'Wicked' Policy Challenges: Tools, Strategies and Directions for Driving Ment...
'Wicked' Policy Challenges: Tools, Strategies and Directions for Driving Ment...Wellesley Institute
 
Intro to Testing in Zope, Plone
Intro to Testing in Zope, PloneIntro to Testing in Zope, Plone
Intro to Testing in Zope, PloneQuintagroup
 
A Taste of Python - Devdays Toronto 2009
A Taste of Python - Devdays Toronto 2009A Taste of Python - Devdays Toronto 2009
A Taste of Python - Devdays Toronto 2009Jordan Baker
 
Plone TuneUp challenges
Plone TuneUp challengesPlone TuneUp challenges
Plone TuneUp challengesAndrew Mleczko
 

Viewers also liked (6)

Plone i18n, LinguaPlone
Plone i18n, LinguaPlonePlone i18n, LinguaPlone
Plone i18n, LinguaPlone
 
'Wicked' Policy Challenges: Tools, Strategies and Directions for Driving Ment...
'Wicked' Policy Challenges: Tools, Strategies and Directions for Driving Ment...'Wicked' Policy Challenges: Tools, Strategies and Directions for Driving Ment...
'Wicked' Policy Challenges: Tools, Strategies and Directions for Driving Ment...
 
Intro to Testing in Zope, Plone
Intro to Testing in Zope, PloneIntro to Testing in Zope, Plone
Intro to Testing in Zope, Plone
 
A Taste of Python - Devdays Toronto 2009
A Taste of Python - Devdays Toronto 2009A Taste of Python - Devdays Toronto 2009
A Taste of Python - Devdays Toronto 2009
 
Plone TuneUp challenges
Plone TuneUp challengesPlone TuneUp challenges
Plone TuneUp challenges
 
Adobe Connect Audio Conference Bridge
Adobe Connect Audio Conference BridgeAdobe Connect Audio Conference Bridge
Adobe Connect Audio Conference Bridge
 

Similar to Plone Testing: Unit, Integration and Functional Tests

Effective testing with pytest
Effective testing with pytestEffective testing with pytest
Effective testing with pytestHector Canto
 
Testing Django Applications
Testing Django ApplicationsTesting Django Applications
Testing Django ApplicationsHonza Král
 
Making the most of your Test Suite
Making the most of your Test SuiteMaking the most of your Test Suite
Making the most of your Test Suiteericholscher
 
Test Driven Development With Python
Test Driven Development With PythonTest Driven Development With Python
Test Driven Development With PythonSiddhi
 
Testing for Pragmatic People
Testing for Pragmatic PeopleTesting for Pragmatic People
Testing for Pragmatic Peopledavismr
 
Тестирование и Django
Тестирование и DjangoТестирование и Django
Тестирование и DjangoMoscowDjango
 
Flink Forward Berlin 2017: Maciek Próchniak - TouK Nussknacker - creating Fli...
Flink Forward Berlin 2017: Maciek Próchniak - TouK Nussknacker - creating Fli...Flink Forward Berlin 2017: Maciek Próchniak - TouK Nussknacker - creating Fli...
Flink Forward Berlin 2017: Maciek Próchniak - TouK Nussknacker - creating Fli...Flink Forward
 
Testing Django APIs
Testing Django APIsTesting Django APIs
Testing Django APIstyomo4ka
 
E2E testing con nightwatch.js - Drupalcamp Spain 2018
E2E testing con nightwatch.js  - Drupalcamp Spain 2018E2E testing con nightwatch.js  - Drupalcamp Spain 2018
E2E testing con nightwatch.js - Drupalcamp Spain 2018Salvador Molina (Slv_)
 
Unit Testing - The Whys, Whens and Hows
Unit Testing - The Whys, Whens and HowsUnit Testing - The Whys, Whens and Hows
Unit Testing - The Whys, Whens and Howsatesgoral
 
Leveling Up With Unit Testing - php[tek] 2023
Leveling Up With Unit Testing - php[tek] 2023Leveling Up With Unit Testing - php[tek] 2023
Leveling Up With Unit Testing - php[tek] 2023Mark Niebergall
 
In search of JavaScript code quality: unit testing
In search of JavaScript code quality: unit testingIn search of JavaScript code quality: unit testing
In search of JavaScript code quality: unit testingAnna Khabibullina
 
Testing And Drupal
Testing And DrupalTesting And Drupal
Testing And DrupalPeter Arato
 
Django for mobile applications
Django for mobile applicationsDjango for mobile applications
Django for mobile applicationsHassan Abid
 
Testing the frontend
Testing the frontendTesting the frontend
Testing the frontendHeiko Hardt
 
Testes? Mas isso não aumenta o tempo de projecto? Não quero...
Testes? Mas isso não aumenta o tempo de projecto? Não quero...Testes? Mas isso não aumenta o tempo de projecto? Não quero...
Testes? Mas isso não aumenta o tempo de projecto? Não quero...Comunidade NetPonto
 
Introduction to testing with MSTest, Visual Studio, and Team Foundation Serve...
Introduction to testing with MSTest, Visual Studio, and Team Foundation Serve...Introduction to testing with MSTest, Visual Studio, and Team Foundation Serve...
Introduction to testing with MSTest, Visual Studio, and Team Foundation Serve...Thomas Weller
 

Similar to Plone Testing: Unit, Integration and Functional Tests (20)

UPC Testing talk 2
UPC Testing talk 2UPC Testing talk 2
UPC Testing talk 2
 
Effective testing with pytest
Effective testing with pytestEffective testing with pytest
Effective testing with pytest
 
Testing Django Applications
Testing Django ApplicationsTesting Django Applications
Testing Django Applications
 
Making the most of your Test Suite
Making the most of your Test SuiteMaking the most of your Test Suite
Making the most of your Test Suite
 
Test Driven Development With Python
Test Driven Development With PythonTest Driven Development With Python
Test Driven Development With Python
 
Testing Spring Applications
Testing Spring ApplicationsTesting Spring Applications
Testing Spring Applications
 
Testing for Pragmatic People
Testing for Pragmatic PeopleTesting for Pragmatic People
Testing for Pragmatic People
 
Тестирование и Django
Тестирование и DjangoТестирование и Django
Тестирование и Django
 
Flink Forward Berlin 2017: Maciek Próchniak - TouK Nussknacker - creating Fli...
Flink Forward Berlin 2017: Maciek Próchniak - TouK Nussknacker - creating Fli...Flink Forward Berlin 2017: Maciek Próchniak - TouK Nussknacker - creating Fli...
Flink Forward Berlin 2017: Maciek Próchniak - TouK Nussknacker - creating Fli...
 
Testing Django APIs
Testing Django APIsTesting Django APIs
Testing Django APIs
 
E2E testing con nightwatch.js - Drupalcamp Spain 2018
E2E testing con nightwatch.js  - Drupalcamp Spain 2018E2E testing con nightwatch.js  - Drupalcamp Spain 2018
E2E testing con nightwatch.js - Drupalcamp Spain 2018
 
Testing in go
Testing in goTesting in go
Testing in go
 
Unit Testing - The Whys, Whens and Hows
Unit Testing - The Whys, Whens and HowsUnit Testing - The Whys, Whens and Hows
Unit Testing - The Whys, Whens and Hows
 
Leveling Up With Unit Testing - php[tek] 2023
Leveling Up With Unit Testing - php[tek] 2023Leveling Up With Unit Testing - php[tek] 2023
Leveling Up With Unit Testing - php[tek] 2023
 
In search of JavaScript code quality: unit testing
In search of JavaScript code quality: unit testingIn search of JavaScript code quality: unit testing
In search of JavaScript code quality: unit testing
 
Testing And Drupal
Testing And DrupalTesting And Drupal
Testing And Drupal
 
Django for mobile applications
Django for mobile applicationsDjango for mobile applications
Django for mobile applications
 
Testing the frontend
Testing the frontendTesting the frontend
Testing the frontend
 
Testes? Mas isso não aumenta o tempo de projecto? Não quero...
Testes? Mas isso não aumenta o tempo de projecto? Não quero...Testes? Mas isso não aumenta o tempo de projecto? Não quero...
Testes? Mas isso não aumenta o tempo de projecto? Não quero...
 
Introduction to testing with MSTest, Visual Studio, and Team Foundation Serve...
Introduction to testing with MSTest, Visual Studio, and Team Foundation Serve...Introduction to testing with MSTest, Visual Studio, and Team Foundation Serve...
Introduction to testing with MSTest, Visual Studio, and Team Foundation Serve...
 

More from Timo Stollenwerk

German Aerospace Center (DLR) Web Relaunch
German Aerospace Center (DLR) Web RelaunchGerman Aerospace Center (DLR) Web Relaunch
German Aerospace Center (DLR) Web RelaunchTimo Stollenwerk
 
Performance Testing (Python Barcamp Cologne 2020)
Performance Testing (Python Barcamp Cologne 2020)Performance Testing (Python Barcamp Cologne 2020)
Performance Testing (Python Barcamp Cologne 2020)Timo Stollenwerk
 
Roadmap to a Headless Plone
Roadmap to a Headless PloneRoadmap to a Headless Plone
Roadmap to a Headless PloneTimo Stollenwerk
 
Plone.restapi - a bridge to the modern web
Plone.restapi - a bridge to the modern webPlone.restapi - a bridge to the modern web
Plone.restapi - a bridge to the modern webTimo Stollenwerk
 
The Butler and The Snake (Europython 2015)
The Butler and The Snake (Europython 2015)The Butler and The Snake (Europython 2015)
The Butler and The Snake (Europython 2015)Timo Stollenwerk
 
Hypermedia APIs mit Javascript und Python
Hypermedia APIs mit Javascript und PythonHypermedia APIs mit Javascript und Python
Hypermedia APIs mit Javascript und PythonTimo Stollenwerk
 
Plone Testing & Continuous Integration Team Report 2014
Plone Testing & Continuous Integration Team Report 2014Plone Testing & Continuous Integration Team Report 2014
Plone Testing & Continuous Integration Team Report 2014Timo Stollenwerk
 
The Beauty and the Beast - Modern Javascript Development with AngularJS and P...
The Beauty and the Beast - Modern Javascript Development with AngularJS and P...The Beauty and the Beast - Modern Javascript Development with AngularJS and P...
The Beauty and the Beast - Modern Javascript Development with AngularJS and P...Timo Stollenwerk
 
The Butler and the Snake - JCICPH
The Butler and the Snake - JCICPHThe Butler and the Snake - JCICPH
The Butler and the Snake - JCICPHTimo Stollenwerk
 
The Butler and the Snake - Continuous Integration for Python
The Butler and the Snake - Continuous Integration for PythonThe Butler and the Snake - Continuous Integration for Python
The Butler and the Snake - Continuous Integration for PythonTimo Stollenwerk
 
Who let the robot out? Qualitativ hochwertige Software durch Continuous Integ...
Who let the robot out? Qualitativ hochwertige Software durch Continuous Integ...Who let the robot out? Qualitativ hochwertige Software durch Continuous Integ...
Who let the robot out? Qualitativ hochwertige Software durch Continuous Integ...Timo Stollenwerk
 
Who let the robot out? - Building high quality software with Continuous Integ...
Who let the robot out? - Building high quality software with Continuous Integ...Who let the robot out? - Building high quality software with Continuous Integ...
Who let the robot out? - Building high quality software with Continuous Integ...Timo Stollenwerk
 
The Future Is Written - Building next generation Plone sites with plone.app.c...
The Future Is Written - Building next generation Plone sites with plone.app.c...The Future Is Written - Building next generation Plone sites with plone.app.c...
The Future Is Written - Building next generation Plone sites with plone.app.c...Timo Stollenwerk
 
Einführung Test-driven Development
Einführung Test-driven DevelopmentEinführung Test-driven Development
Einführung Test-driven DevelopmentTimo Stollenwerk
 

More from Timo Stollenwerk (20)

German Aerospace Center (DLR) Web Relaunch
German Aerospace Center (DLR) Web RelaunchGerman Aerospace Center (DLR) Web Relaunch
German Aerospace Center (DLR) Web Relaunch
 
Performance Testing (Python Barcamp Cologne 2020)
Performance Testing (Python Barcamp Cologne 2020)Performance Testing (Python Barcamp Cologne 2020)
Performance Testing (Python Barcamp Cologne 2020)
 
Python & JavaScript
Python & JavaScriptPython & JavaScript
Python & JavaScript
 
Roadmap to a Headless Plone
Roadmap to a Headless PloneRoadmap to a Headless Plone
Roadmap to a Headless Plone
 
Plone.restapi - a bridge to the modern web
Plone.restapi - a bridge to the modern webPlone.restapi - a bridge to the modern web
Plone.restapi - a bridge to the modern web
 
Divide et impera
Divide et imperaDivide et impera
Divide et impera
 
The Butler and The Snake (Europython 2015)
The Butler and The Snake (Europython 2015)The Butler and The Snake (Europython 2015)
The Butler and The Snake (Europython 2015)
 
Hypermedia APIs mit Javascript und Python
Hypermedia APIs mit Javascript und PythonHypermedia APIs mit Javascript und Python
Hypermedia APIs mit Javascript und Python
 
Plone Testing & Continuous Integration Team Report 2014
Plone Testing & Continuous Integration Team Report 2014Plone Testing & Continuous Integration Team Report 2014
Plone Testing & Continuous Integration Team Report 2014
 
The Beauty and the Beast - Modern Javascript Development with AngularJS and P...
The Beauty and the Beast - Modern Javascript Development with AngularJS and P...The Beauty and the Beast - Modern Javascript Development with AngularJS and P...
The Beauty and the Beast - Modern Javascript Development with AngularJS and P...
 
The Butler and the Snake - JCICPH
The Butler and the Snake - JCICPHThe Butler and the Snake - JCICPH
The Butler and the Snake - JCICPH
 
The Butler and the Snake - Continuous Integration for Python
The Butler and the Snake - Continuous Integration for PythonThe Butler and the Snake - Continuous Integration for Python
The Butler and the Snake - Continuous Integration for Python
 
AngularJS & Plone
AngularJS & PloneAngularJS & Plone
AngularJS & Plone
 
Who let the robot out? Qualitativ hochwertige Software durch Continuous Integ...
Who let the robot out? Qualitativ hochwertige Software durch Continuous Integ...Who let the robot out? Qualitativ hochwertige Software durch Continuous Integ...
Who let the robot out? Qualitativ hochwertige Software durch Continuous Integ...
 
Plone5
Plone5Plone5
Plone5
 
Who let the robot out? - Building high quality software with Continuous Integ...
Who let the robot out? - Building high quality software with Continuous Integ...Who let the robot out? - Building high quality software with Continuous Integ...
Who let the robot out? - Building high quality software with Continuous Integ...
 
The Future Is Written - Building next generation Plone sites with plone.app.c...
The Future Is Written - Building next generation Plone sites with plone.app.c...The Future Is Written - Building next generation Plone sites with plone.app.c...
The Future Is Written - Building next generation Plone sites with plone.app.c...
 
Plone Einführung
Plone EinführungPlone Einführung
Plone Einführung
 
Einführung Test-driven Development
Einführung Test-driven DevelopmentEinführung Test-driven Development
Einführung Test-driven Development
 
Test-Driven Development
Test-Driven DevelopmentTest-Driven Development
Test-Driven Development
 

Plone Testing: Unit, Integration and Functional Tests