BRISBANE CITY COUNCIL BRISBANE Australia Trade Coast Sewer ...
Unit Testing [email protected] Australian Development Centre Brisbane, Australia.
-
Upload
paul-sheron -
Category
Documents
-
view
221 -
download
0
Transcript of Unit Testing [email protected] Australian Development Centre Brisbane, Australia.
![Page 2: Unit Testing patrick.kua@oracle.com Australian Development Centre Brisbane, Australia.](https://reader035.fdocuments.net/reader035/viewer/2022062312/5518c2b9550346881f8b569b/html5/thumbnails/2.jpg)
Aims
Unit Testing vs Traditional Testing Benefits of Unit Testing Introduction to xUnit (using JUnit)
frameworks Advanced Unit Testing Strategies
![Page 3: Unit Testing patrick.kua@oracle.com Australian Development Centre Brisbane, Australia.](https://reader035.fdocuments.net/reader035/viewer/2022062312/5518c2b9550346881f8b569b/html5/thumbnails/3.jpg)
Traditional Testing
Test the system as a whole
Individual components rarely tested
Errors go undetected Isolation of errors
difficult to track down
![Page 4: Unit Testing patrick.kua@oracle.com Australian Development Centre Brisbane, Australia.](https://reader035.fdocuments.net/reader035/viewer/2022062312/5518c2b9550346881f8b569b/html5/thumbnails/4.jpg)
Traditional Testing Strategies
Print Statements Use of Debugger Debugger Expressions Test Scripts
![Page 5: Unit Testing patrick.kua@oracle.com Australian Development Centre Brisbane, Australia.](https://reader035.fdocuments.net/reader035/viewer/2022062312/5518c2b9550346881f8b569b/html5/thumbnails/5.jpg)
Unit Testing
Each part tested individually
All components tested at least once
Errors picked up earlier
Scope is smaller, easier to fix errors
![Page 6: Unit Testing patrick.kua@oracle.com Australian Development Centre Brisbane, Australia.](https://reader035.fdocuments.net/reader035/viewer/2022062312/5518c2b9550346881f8b569b/html5/thumbnails/6.jpg)
Unit Testing Ideals
Isolatable Repeatable Automatable Easy to Write
![Page 7: Unit Testing patrick.kua@oracle.com Australian Development Centre Brisbane, Australia.](https://reader035.fdocuments.net/reader035/viewer/2022062312/5518c2b9550346881f8b569b/html5/thumbnails/7.jpg)
Why Unit Test?
Faster Debugging Faster Development Better Design Excellent Regression Tool Reduce Future Cost
![Page 8: Unit Testing patrick.kua@oracle.com Australian Development Centre Brisbane, Australia.](https://reader035.fdocuments.net/reader035/viewer/2022062312/5518c2b9550346881f8b569b/html5/thumbnails/8.jpg)
Unit Tests
Simple Standalone Classes High Level Classes Database based Classes Integrated Framework Classes
![Page 9: Unit Testing patrick.kua@oracle.com Australian Development Centre Brisbane, Australia.](https://reader035.fdocuments.net/reader035/viewer/2022062312/5518c2b9550346881f8b569b/html5/thumbnails/9.jpg)
JUnit (www.junit.org)
Java-based unit testing framework
Elegantly simple Easy to write unit
tests Easy to manage unit
tests Open source = Free!
Mature Framework De facto java
standard Ant integration Generic testing
framework
![Page 10: Unit Testing patrick.kua@oracle.com Australian Development Centre Brisbane, Australia.](https://reader035.fdocuments.net/reader035/viewer/2022062312/5518c2b9550346881f8b569b/html5/thumbnails/10.jpg)
JUnit Is Not Perfect
GUI testing– Marathon Man, WinRunner
EJB Components– HttpUnit, Cactus
Limited Reporting mechanism– Artima
Time to set up Testing of non-java objects difficult
![Page 11: Unit Testing patrick.kua@oracle.com Australian Development Centre Brisbane, Australia.](https://reader035.fdocuments.net/reader035/viewer/2022062312/5518c2b9550346881f8b569b/html5/thumbnails/11.jpg)
Key Concepts in JUnit
Test interface Assert TestCase
– assertTrue– assertEquals– fail
TestSuite TestDecorator/TestSetup Failures vs Errors
<Test>run(TestResult)
TestCasesetUp()
tearDown()
TestSuiterun(TestResult)
Assert
![Page 12: Unit Testing patrick.kua@oracle.com Australian Development Centre Brisbane, Australia.](https://reader035.fdocuments.net/reader035/viewer/2022062312/5518c2b9550346881f8b569b/html5/thumbnails/12.jpg)
JUnit is Easy
…public void testInvalidPersonName() { person.setFirstName(null); person.setLastName(“Smith”); try { personService.createPerson(person); fail(“An invalid person name should be thrown”); } catch (InvalidPersonName ipn) { // Exception expected }}…
![Page 13: Unit Testing patrick.kua@oracle.com Australian Development Centre Brisbane, Australia.](https://reader035.fdocuments.net/reader035/viewer/2022062312/5518c2b9550346881f8b569b/html5/thumbnails/13.jpg)
Writing a Unit Test
1. Create a class to hold the unit tests2. Initialise objects (setUp() method) 3. (State assertions – preconditions)*4. Call operations on the objects that are
being unit tested5. State assertions/failures expected6. Clean up (tearDown() method)7. Execute the unit test
![Page 14: Unit Testing patrick.kua@oracle.com Australian Development Centre Brisbane, Australia.](https://reader035.fdocuments.net/reader035/viewer/2022062312/5518c2b9550346881f8b569b/html5/thumbnails/14.jpg)
JUnit Best Practices
Setting up unit tests Running unit tests Writing unit tests
![Page 15: Unit Testing patrick.kua@oracle.com Australian Development Centre Brisbane, Australia.](https://reader035.fdocuments.net/reader035/viewer/2022062312/5518c2b9550346881f8b569b/html5/thumbnails/15.jpg)
Setting up Unit Tests
ctb src oracle apps ctb …test oracle apps ctb …
public class SomeClass{ ..
public void someMethod() { .. }
..}
public class SomeClassTest{ public void testSomeMethod() { .. }}
![Page 16: Unit Testing patrick.kua@oracle.com Australian Development Centre Brisbane, Australia.](https://reader035.fdocuments.net/reader035/viewer/2022062312/5518c2b9550346881f8b569b/html5/thumbnails/16.jpg)
Running Unit Tests
Define standard Ant targets Run unit tests automatically and
continuously Implement code coverage tools
Line not executed
Executed line
Number of times executed
![Page 17: Unit Testing patrick.kua@oracle.com Australian Development Centre Brisbane, Australia.](https://reader035.fdocuments.net/reader035/viewer/2022062312/5518c2b9550346881f8b569b/html5/thumbnails/17.jpg)
Quality of Unit Tests
Number of Unit Tests Code Coverage
![Page 18: Unit Testing patrick.kua@oracle.com Australian Development Centre Brisbane, Australia.](https://reader035.fdocuments.net/reader035/viewer/2022062312/5518c2b9550346881f8b569b/html5/thumbnails/18.jpg)
Writing Unit Tests
Avoid setup in constructor Define tests correctly Minimise side-effects of
unit tests Leverage Junit’s assertions
and failures to their fullest Keep tests small and fast Automate all processes Write effective exception
handling code Add a test case for every
bug exposed Refactor, refactor, refactor
![Page 19: Unit Testing patrick.kua@oracle.com Australian Development Centre Brisbane, Australia.](https://reader035.fdocuments.net/reader035/viewer/2022062312/5518c2b9550346881f8b569b/html5/thumbnails/19.jpg)
Advanced Unit Testing
Mock Objects What to Test and How Much to Test
– Bugs– New Functionality
Optimize Running Time Code Coverage Environment Management
– Continuous Integration– Local and remote development
![Page 20: Unit Testing patrick.kua@oracle.com Australian Development Centre Brisbane, Australia.](https://reader035.fdocuments.net/reader035/viewer/2022062312/5518c2b9550346881f8b569b/html5/thumbnails/20.jpg)
Conclusion
Unit testing adds enormous value to software development
JUnit makes testing java programs easy Advanced Unit Testing Concepts
![Page 21: Unit Testing patrick.kua@oracle.com Australian Development Centre Brisbane, Australia.](https://reader035.fdocuments.net/reader035/viewer/2022062312/5518c2b9550346881f8b569b/html5/thumbnails/21.jpg)
Questions?