Test driven development (TDD) which is also known as test first programming or test infected programming refers to the practice of software developers where they write code test cases before the actual application code is written. This practice enhances the code and design quality of the software, reduces bugs and improves the overall software development efficiency.
JUnit is a Java library that facilitates TDD in Java. It is the de facto standard. It has many extensions and has also been ported to many different programming languages. This training program focuses on TDD with JUnit and some of the widely used extensions.
At the end of the training, participants will be able to
- Describe the benefits of test driven development and practice the same.
- Design, organize and develop good unit tests with JUnit.
- Use JUnit 3 and 4 syntax to code JUnit test cases.
- Use JUnit with different development environments (Eclipse, Ant, Maven).
- Use DbUnit to test database related code.
- Describe what mock object testing is and use EasyMock to do the same.
- Use HttpUnit and jWebUnit for web application functionality testing.
- Follow best practices in using JUnit and the extensions to improve the development efficiency and software quality.
- Java developers
- You should be familiar with Java programming language. Expert knowledge is not needed.
1 day (~8 hours)
Kamal Wickramanayake (Profile)
Introduction to Test Driven Development
- What is test driven development (or test infected programming)?
- What is unit testing?
- Comparing unit testing and debugging
- Who should write these tests?
- Qualities expected from a regression testing framework
Introduction to JUnit
- Possible code testing mechanisms
- JUnit as a regression testing framework for Java
- How to represent a test in JUnit?
- TestCase class and different assertions
- Running a test
- Using different source directories for tests and application code
- Implementing multiple tests within a TestCase
- Test fixture
- Test code skeleton auto generation
Special Test Scenarios
- Testing for exceptions
- Difference between errors and failures
- Testing code that spawns new threads
- Issues with singletons
Development Environments, Test Runners and Reports
- Using JUnit with Eclipse, Ant and Maven
- Generating test reports (XML, HTML)
JUnit Best Practices
- Garbage collection of tests and working with large code bases
- Bug fixing assisted by unit tests
- Code refactoring assisted by unit tests
- Improving class modularity and testability
- What to test and what not to test?
Introduction to DbUnit
- Difficulties encountered in unit testing database related classes
- How does DbUnit solve them?
A DbUnit Example
- Creating a dataset file
- Creating the test class
- Database data verification
- Running the test
DbUnit Best Practices
- One database instance per developer.
- One test at a time.
Introduction to Mock Object Testing
- Testing classes that depend on other classes
- The role of mock objects
- A primitive approach in creating mock objects (Write them for your self)
Mock Object Testing with EasyMock
- Creating a mock object from an interface dynamically
- Specifying the expectations, exercising the test methods, verification
- Specifying return values
- Working with exceptions
- Argument matching
- Limitations of EasyMock
- Mock objects for concrete classes
JUnit Extension: HttpUnit for Web Application Testing
- Functionality testing with HttpUnit (as opposed to unit testing)
- Writing a test case with HttpUnit
- Executing the tests
- Overview of HttpUnit API
JUnit Extension: jWebUnit for Web Application Testing
- Example jWebUnit test
- HttpUnit Vs jWebUnit
- Overview of some other useful JUnit extensions
- What is in-container testing?
- Costs Vs benefits of writing unit tests