JAVTDDA – Test-Driven Development in Java – Unit Testing and Refactoring for Agile Software Development

Enquire/Book this course

  • This field is for validation purposes and should be left unchanged.
Print this page
  • Code: JAVTDDA
  • Duration: Days 2
  • Price per delegate: £500.00 +VAT

Trained over 60000 delegates

Course delivered by industry expert instructors

Highly competitive pricing

 

Course Description

The Test-Driven Development in Java course presents a number of modern practices for developing code based on an iterative and incremental development lifecycle. Agility and predictability are two qualities often missing from software development. A test-driven approach, in which design is grown and code delivered incrementally according to functionality or risk, forms the basis of the construction phase of an iterative and incremental development. The use of unit testing provides confidence in existing code and supports the ability to refactor code as development unfolds. The course is intended as a practical course: the best way to appreciate how test-driven development works and what it feels like is to do it in practice, making sense of the principles it embodies. In this form the course is based on lecture material, demonstration, discussion and hands-on labs. However, the course can also be run as a seminar without hands-on labs, which puts more emphasis on understanding the principles through the demonstrations.
Target Student:
The course is suitable for software developers experienced in Java and familiar with object oriented principles and practices.
Prerequisites:
Any previous exposure to JUnit or agile development concepts is beneficial but not essential.
Delivery Method: Instructor led, group-paced, classroom-delivery learning model with structured hands-on activities.
The training course combines lectures with practical exercises that help the delegates to put what they have learned on the training course into practice. The exercises specifically build on what has been recently taught and are built up as the training course progresses.
 
 
Performance-Based Objectives
At the end of this training course, students should be able to:
  • Appreciate the benefits of a continuous and iterative approach to design and delivery
  • Recognise the purpose and practice of refactoring in keeping a system supple and adaptable
  • Know how to build up a set of unit tests in JUnit
  • Understand the consequences of dependency management on testing and code quality
 
Course Content
Agile Development Microprocess
  • Traditional versus agile development processes
  • Iterative and incremental development
  • Informal and continuous design
  • The role of refactoring
  • Refactoring versus other code changes
  • Extreme Programming
  • Test-Driven Development
2. Testing in Principle
  • Traditional view and reality of testing
  • Driving development through testing
  • Testing early, often and automatically
  • Testing versus debugging
  • White-box versus black-box testing
  • Functional versus operational testing
3. Basic Unit Testing in Practice
  • Test plans versus test code
  • Use of Assert
  • Testing at the interface
  • Testing the simplest things first
  • Testing incrementally
  • Testing correctness of failure
4. Overview of JUnit
  • JUnit and the xUnit family
  • Test cases, test suites and test runners
  • Essential structure of the framework
  • Assertion methods
  • Testing correctness of exceptions
  • Defining common fixture code
  • JUnit pattern usage
  • Extensions to JUnit
5. Test-Writing Techniques
  • Red, green, refactor
  • None to one to many
  • Faking it
  • Telling the truth
  • Isolated and short tests
  • Refactor common fixture code
  • Declare, prepare, assert
  • Test by method, state or scenario
  • Custom assertions
  • Compile-time constraints
  • Running all tests
6. Common Refactorings
  • Renaming variables, methods, classes and packages
  • Restructuring class hierarchies by extracting interfaces, superclasses and subclasses
  • Partitioning classes by extracting classes and methods
  • Changing private representation
7. Decoupling Techniques
  • Unmanaged dependencies
  • Test-driven decoupling
  • Layering
  • Reorganising packages
  • Eliminating cyclic dependencies
  • Mock objects
  • Eliminating Singletons, statics and other globals
  • Testing I/O