![Page 1: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/1.jpg)
FINDING THE SCOPEPatterns and best practices for testing
Eclipse RCP Applications
Matthias Kempka ([email protected])Thursday, September 9, 2010
![Page 2: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/2.jpg)
Why is testing RCP Applications a topic?
Thursday, September 9, 2010
![Page 3: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/3.jpg)
WHAT IS A SCOPE?
Thursday, September 9, 2010
![Page 4: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/4.jpg)
WHAT IS A SCOPE?
AND WHY IS IT IMPORTANT?
Thursday, September 9, 2010
![Page 5: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/5.jpg)
SCOPE: UNIT-TEST
Thursday, September 9, 2010
![Page 6: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/6.jpg)
SCOPE: UNIT-TESTS
Advantage:✓Testing on method/class scope✓Easy to execute in IDE✓Fast
Thursday, September 9, 2010
![Page 7: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/7.jpg)
SCOPE: UNIT-TEST
Common problems:-Code in legacy systems-Class dependencies-Misused as Mini-integration tests
Thursday, September 9, 2010
![Page 8: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/8.jpg)
UNIT-TESTS
Finding the scope of a unit test
Thursday, September 9, 2010
![Page 9: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/9.jpg)
UNIT TESTING WORKFLOW
Demo: A plain JUnit Test grows into a PDE Test
Thursday, September 9, 2010
![Page 10: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/10.jpg)
A COMMON MISUNDERSTANDING
PDE Tests allow execution of code in the product scope
I want to write a Unit Test
PDE Tests are the Eclipse way to write unit tests
I’ll just write an integration test
Thursday, September 9, 2010
![Page 11: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/11.jpg)
THE MISUNDERSTOOD PDE TEST
PDE Test
Product
Network Database
Thursday, September 9, 2010
![Page 12: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/12.jpg)
THE MISUNDERSTOOD PDE TEST
PDE Test
Product
Network Database
This is no Unit Test!
Thursday, September 9, 2010
![Page 13: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/13.jpg)
UNIT TEST
• A unit is a small chunk of code
• Should be tested independent from other code
• That’s not always possible, especially in systems that where not created test driven
Thursday, September 9, 2010
![Page 14: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/14.jpg)
A SOFTWARE UNIT
Thursday, September 9, 2010
![Page 15: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/15.jpg)
INTERCEPTION POINTS
An Interception Point is a point in your program where you can detect the effects of a particular change. (Michael Feathers, Working Effectively with Legacy Code)
Thursday, September 9, 2010
![Page 16: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/16.jpg)
INTERCEPTION POINT
Thursday, September 9, 2010
![Page 17: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/17.jpg)
INTERCEPTION POINT
•The method on the previous slide needs some changes.
•On the way it shall be refactored into this method:
Thursday, September 9, 2010
![Page 18: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/18.jpg)
EFFECTS OF GETVALUE
• getValue() will change.
• The only use is in another class BillingStatement
getValue
BillingStatement.makeStatement
Thursday, September 9, 2010
![Page 19: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/19.jpg)
EFFECTS ON GETVALUE• Several other things will change that affect getValue.
getValue
constructor
shippingPricercreates
Thursday, September 9, 2010
![Page 20: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/20.jpg)
A CHAIN OF EFFECTS
getValue
constructor
shippingPricercreates
BillingStatement.makeStatement
Thursday, September 9, 2010
![Page 21: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/21.jpg)
INTERCEPTION POINTS
getValue
constructor
shippingPricercreates
BillingStatement.makeStatementinterception
point
interception point
interception point
interception point
Thursday, September 9, 2010
![Page 22: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/22.jpg)
CHANGE POINTS
getValue
constructor
shippingPricercreates
BillingStatement.makeStatement
change point
change point
change point
interception point
interception point
interception point
interception point
Thursday, September 9, 2010
![Page 23: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/23.jpg)
INTERCEPTION POINTS
• Pick your interception point close to the change points
• Safety: Every step between a change point and an interception point is like a logical argument
• Practicability: In general (not always) it’s harder to set up interception points that are far away
• Maintainability: Your tests serve as regression tests. You don’t want to observe more effects than necessary.
Thursday, September 9, 2010
![Page 24: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/24.jpg)
A JUNIT FEATURE
JUnit Rules
Thursday, September 9, 2010
![Page 25: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/25.jpg)
JUNIT RULES
• Rules have been (unnoticed) in JUnit for a while (since 4.7)
• A simple way to get code run before and after the test
• In the past, test runners where used for that
Thursday, September 9, 2010
![Page 26: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/26.jpg)
TEMPORARYFOLDER
• A rule is a field, annotated with @Rule
• must be public
Thursday, September 9, 2010
![Page 27: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/27.jpg)
PREDEFINED RULES
• JUnit comes with a few rules predefined
• TemporaryFolder - Provides files that live as long as the test
• ExpectedException - A replacement for @Test(expected=...)
• TestName - Provides access to the test name
• Timeout - A replacement for @Test(timeout=...)
• ErrorCollector - Collect test failures instead of failing at the first error
Thursday, September 9, 2010
![Page 28: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/28.jpg)
CREATING A RULE
• Creating a rule is done by implementing org.junit.rules.MethodRule
• If you simply want to execute something before and after a test method, extend org.junit.rules.ExternalResource
Thursday, September 9, 2010
![Page 29: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/29.jpg)
A RULE FOR TESTS WITH SWT
Thursday, September 9, 2010
![Page 30: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/30.jpg)
INTERCEPTION POINTS
Demo: Testing View code without workbench
Thursday, September 9, 2010
![Page 31: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/31.jpg)
UNIT TESTS IN THE CONTINUOUS INTEGRATION
• If set up correctly, Unit tests generally can run as PDE tests
• Set up a test suite that runs all Unit and PDE tests as PDE tests
• Alternative: Put all the plug-ins on the java classpath and run the JUnit Tests in a normal Java environment (common solution in OSGi and RAP applications)
Thursday, September 9, 2010
![Page 32: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/32.jpg)
SCOPE: INTEGRATION TEST
Thursday, September 9, 2010
![Page 33: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/33.jpg)
SCOPE: INTEGRATION TESTS
Advantage:✓Regression tests on a scope where you don’t execute on a per-day basis✓High trust factor
Thursday, September 9, 2010
![Page 34: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/34.jpg)
PDE TEST AS INTEGRATION TEST
PDE Test
Product
Network Database
Thursday, September 9, 2010
![Page 35: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/35.jpg)
PDE TEST AS INTEGRATION TEST
PDE Test
Product
Network Database
OSGi Container
✓ ✓
Thursday, September 9, 2010
![Page 36: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/36.jpg)
PDE TEST AS INTEGRATION TEST
• Common problems:
- A PDE Test can’t do much more than verify that a configuration exists
- Setting external resources up (and cleaning them up) often must be done external
Thursday, September 9, 2010
![Page 37: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/37.jpg)
COMMON SOLUTIONS
• Common solutions for integration tests include
✓ Having a fixed test user/test data in the development database
✓ Scripts that can set up and tear down the environment
- Hard to set up and maintain
Thursday, September 9, 2010
![Page 38: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/38.jpg)
SCOPE: FUNCTIONAL TEST
Thursday, September 9, 2010
![Page 39: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/39.jpg)
FUNCTIONAL TESTS
Advantage:✓Test on the same abstraction level as the user sees it✓High trust factor
Thursday, September 9, 2010
![Page 40: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/40.jpg)
SCOPE: FUNCTIONAL TESTS
Common problems:-Which tool is the right one?-Executing in IDE vs automated environment
Thursday, September 9, 2010
![Page 41: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/41.jpg)
FUNCTIONAL TEST TYPES
• Functional tests can be created through
• Programming
• Capture/Refactor/Replay
• In any case you need another tool than plain JUnit/PDE Test
Thursday, September 9, 2010
![Page 42: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/42.jpg)
SWTBOT
• SWTBot finds SWT Widgets
• It provides an API for using widgets as if you where a user
• http://www.eclipse.org/swtbot/
Thursday, September 9, 2010
![Page 43: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/43.jpg)
SWTBOT
Demo: SWTBot Test Case
Thursday, September 9, 2010
![Page 44: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/44.jpg)
ACCESS TO CODE
• The code for the Rule CaptureScreenshotOnFailure can be found at http://eclipsesource.com/blogs/2010/09/09/capture-screenshot-on-failing-swtbot-tests/
Thursday, September 9, 2010
![Page 45: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/45.jpg)
WHY NOT FUNCTIONAL TESTS?
• Good Unit-Tests can achieve >80% code coverage
• With a careful design, all controller and model logic can be tested
• You won’t be able to test Layouting with functional tests
Thursday, September 9, 2010
![Page 46: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/46.jpg)
WHY FUNCTIONAL TESTS
• Is the controller logic attached to the UI?
• Are various code units connected?
• Regression tests for tricky passages
Thursday, September 9, 2010
![Page 47: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/47.jpg)
PROPERTIES OF FUNCTIONAL TESTS
• Functional tests are several orders of magnitude slower than unit tests
• Immediate feedback almost impossible
• Interception points for functional tests are far away from the actual code
• Nothing (automated) is closer to the user experience
Thursday, September 9, 2010
![Page 48: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/48.jpg)
TEST PROJECT STRUCTURE
Test Setup in RCP Application
Thursday, September 9, 2010
![Page 49: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/49.jpg)
SETUP IN RCP APPLICATIONS
•We don’t want to ship JUnit with the application•We want to use PDE tests and the Eclipse Testing Framework
Thursday, September 9, 2010
![Page 50: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/50.jpg)
TESTS IN SEPARATE BUNDLES
Bundle ATest
Bundle
Bundle B
JUnit
Thursday, September 9, 2010
![Page 51: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/51.jpg)
TESTS IN SEPARATE BUNDLES
• Advantages:
✓ A Test plug-in for a bunch of bundles
✓ Separate plug-in for Unit Tests
✓ Rather easy to set up and maintain plug-in structure
Thursday, September 9, 2010
![Page 52: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/52.jpg)
TESTS IN SEPARATE BUNDLES
• Consequences:
- Hard to access internal classes (need to be exported)
- Every method under test must be public
Thursday, September 9, 2010
![Page 53: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/53.jpg)
USES IN RCP APPLICATIONS• Works well to some extend
• You’ll find a lot of code like this:
Thursday, September 9, 2010
![Page 54: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/54.jpg)
USES IN RCP APPLICATIONS• Works well to some extend
• You’ll find a lot of code like this:
• Or worse, like this:
Thursday, September 9, 2010
![Page 55: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/55.jpg)
USES IN RCP APPLICATIONS
• Your Manifest.mf contains a lot entries like this:
Thursday, September 9, 2010
![Page 56: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/56.jpg)
TESTS IN FRAGMENTS
Bundle ATest
Fragment A
Bundle B
JUnit
Test Fragment B
Thursday, September 9, 2010
![Page 57: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/57.jpg)
TESTS IN FRAGMENTS
• Advantages:
✓ No classloader between test and class
➡ We can narrow down the visibility to default
Thursday, September 9, 2010
![Page 58: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/58.jpg)
TESTS IN FRAGMENTS
• Consequences:
- Every bundle needs a separate test fragment
- Creating and integrating bundles in the application becomes a heavy-weight task
- Especially the initial setup frightens off developers
Thursday, September 9, 2010
![Page 59: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/59.jpg)
Test FeatureProduct
TESTS IN SEPARATE ARTIFACTS
Bundle ATest
Fragment A
Bundle B
JUnit
Test Fragment B
Thursday, September 9, 2010
![Page 60: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/60.jpg)
CONTINUOUS INTEGRATION CONCERNS
• Executing Tests requires:
• The RCP Application
• The Test Feature
• Eclipse Testing Framework
• JDT + Requirements (This will likely vanish in 3.7)
Thursday, September 9, 2010
![Page 61: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/61.jpg)
CONTINUOUS INTEGRATION CONCERNS
• In practice, sometimes tests don’t get executed because of changed dependencies
• Hard to find out why
➡ Use p2 to install the tests into the product
Thursday, September 9, 2010
![Page 62: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/62.jpg)
TESTS IN THE PLUG-IN
Bundle A& Tests
Bundle B& Tests
JUnit
optional
optional
Thursday, September 9, 2010
![Page 63: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/63.jpg)
TESTS IN THE PLUG-IN
• Advantages:
✓ No test dependency management overhead
Thursday, September 9, 2010
![Page 64: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/64.jpg)
TESTS IN THE PLUG-IN
• Consequences:
- Tests ship with the product
- Hazzles with test/productive code interdependencies
Thursday, September 9, 2010
![Page 65: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/65.jpg)
USES IN OSGI APPLICATIONS
• This is a common structure for OSGi projects
• Not so common in RCP applications
Thursday, September 9, 2010
![Page 66: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/66.jpg)
TEST SUITE
• Don’t try to set up a Test Suite across different bundles yourself.
• There’ll be another talk about test suites later today
• Bundle Testcollector from Patrick Paulin makes it easy to set up Test Suites in an OSGi container
Thursday, September 9, 2010
![Page 67: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/67.jpg)
BUNDLE TESTCOLLECTOR
• Bundle Testcollector Input
• pattern for bundle id
• pattern for class name
• Goes through the specified bundles, pulls together the classes and puts them on a PDE test suite
• http://www.modumind.com/2008/06/12/running-unit-tests-for-rcp-and-osgi-applications/
Thursday, September 9, 2010
![Page 68: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/68.jpg)
BUNDLE TESTCOLLECTOR
• Small problem:
• The Bundle Testcollector is only able to construct JUnit3 Test Suites
• A small change is necessary to make it compatible with JUnit4 tests (wrap the found class in a JUnit4TestAdapter).
Thursday, September 9, 2010
![Page 69: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/69.jpg)
TEST SUITE
Demo: Setting up a Test Suite with BundleTestCollector
Thursday, September 9, 2010
![Page 70: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/70.jpg)
TEST SUITES
• Structure your test suites by execution speed and Test Runners
• SWTBot tests need a separate test runner
• Unit tests are meant to be fast, developers will execute them regularly
• Integration tests may take a while, they will mainly be executed in the continuous integration
Thursday, September 9, 2010
![Page 71: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/71.jpg)
ACCESS TO CODE
The Bundle Testcollector that was demonstrated can be accessed at http://eclipsesource.com/blogs/2010/09/09/an-almost-perfect-test-suite/
Thursday, September 9, 2010
![Page 72: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/72.jpg)
CONCLUSION
•Use the tools at hand•Efficient testing comes with differentiation and structure
Thursday, September 9, 2010
![Page 73: FINDING THE SCOPE - Eclipsewiki.eclipse.org/images/c/ce/EclipseTestingDay2010-Finding_the_Scope.pdfFeathers, Working Effectively with Legacy Code) Thursday, September 9, 2010. INTERCEPTION](https://reader035.vdocuments.mx/reader035/viewer/2022070821/5f2278ed4f1e8f4e2d6e8015/html5/thumbnails/73.jpg)
REFERENCES
• Michael C. Feathers, Working Effectively with Legacy code
• http://eclipse.org/swtbot
Thursday, September 9, 2010