0% found this document useful (0 votes)
67 views

Unit Testing: Australian Development Centre Brisbane, Australia

This document discusses unit testing and the Java unit testing framework JUnit. It begins by explaining the benefits of unit testing over traditional testing such as easier debugging and faster development. It then provides an overview of JUnit, describing it as an elegant and simple framework for writing unit tests in Java. The document outlines best practices for setting up, running, and writing unit tests and discusses advanced unit testing concepts like mock objects and test environment management.

Uploaded by

thirupswin
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
67 views

Unit Testing: Australian Development Centre Brisbane, Australia

This document discusses unit testing and the Java unit testing framework JUnit. It begins by explaining the benefits of unit testing over traditional testing such as easier debugging and faster development. It then provides an overview of JUnit, describing it as an elegant and simple framework for writing unit tests in Java. The document outlines best practices for setting up, running, and writing unit tests and discusses advanced unit testing concepts like mock objects and test environment management.

Uploaded by

thirupswin
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 21

Unit Testing

patrick.kua@oracle.com Australian Development Centre Brisbane, Australia

Aims
Unit Testing vs Traditional Testing Benefits of Unit Testing Introduction to xUnit (using JUnit) frameworks Advanced Unit Testing Strategies

Traditional Testing
Test the system as a whole Individual components rarely tested Errors go undetected Isolation of errors difficult to track down

Traditional Testing Strategies


Print Statements Use of Debugger Debugger Expressions Test Scripts

Unit Testing
Each part tested individually All components tested at least once Errors picked up earlier Scope is smaller, easier to fix errors

Unit Testing Ideals


Isolatable Repeatable Automatable Easy to Write

Why Unit Test?


Faster Debugging Faster Development Better Design Excellent Regression Tool Reduce Future Cost

Unit Tests
Simple Standalone Classes High Level Classes Database based Classes Integrated Framework Classes

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

JUnit Is Not Perfect


GUI testing

Marathon Man, WinRunner HttpUnit, Cactus Artima

EJB Components

Limited Reporting mechanism

Time to set up Testing of non-java objects difficult

Key Concepts in JUnit


Test interface Assert TestCase

Assert

<Test> run(TestResult)

assertTrue assertEquals fail

TestCase setUp() tearDown()

TestSuite run(TestResult)

TestSuite TestDecorator/TestSetup Failures vs Errors

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 } }

Writing a Unit Test


1. 2. 3. 4. Create a class to hold the unit tests Initialise objects (setUp() method) (State assertions preconditions)* Call operations on the objects that are being unit tested 5. State assertions/failures expected 6. Clean up (tearDown() method) 7. Execute the unit test

JUnit Best Practices


Setting up unit tests Running unit tests Writing unit tests

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() { .. } }

Running Unit Tests


Define standard Ant targets Run unit tests automatically and continuously Implement code coverage tools
Line not executed Number of times executed

Executed line

Quality of Unit Tests


Number of Unit Tests Code Coverage

Writing Unit Tests


Avoid setup in constructor Define tests correctly Minimise side-effects of unit tests Leverage Junits 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

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

Conclusion
Unit testing adds enormous value to software development JUnit makes testing java programs easy Advanced Unit Testing Concepts

Questions?

You might also like