Course: JUnit and Mockito Unit Testing for Java Developers
Modules:
Welcome to the Course, Overview of the Course Structure
Section Introduction, What is Unit Testing?, What is JUnit?, Introducing a Simple Unit Test in JUnit, Structure of a Unit Test (Arrange-Act-Assert and Given/When/Then), Conventions for Writing Unit Tests, Characteristics of Proper Unit Tests, What are Assertions?
Section Introduction, Creating a Java Project Using the Maven Quickstart Archetype in JUnit, Introducing a Typical Java Project Structure (Production vs Test Source Trees), Understanding the Basic Conventions for Creating Unit Tests (Package and Naming)
Section Introduction, Creating a Test Method with @Test Annotation, Running a Unit Test Within the Integrated Development Environment (IDE) and Understanding Test Success, Understanding Test Failures with Exceptions, Failing a Unit Test Explicitly with Assert.Fail(), Using Assert.Fail() to Check Validation Logic in a Try/Catch, Introduction to the JUnit Assertions API, Structuring Unit Tests with Arrange-Act Assert, Understanding the Execution of Assertions and JUnit's Fail-fast Test Failure Mechanism, Adding Descriptive Comments to Assertions and Test Failures to Aid Diagnostics, Coding a Unit Test Following Arrange-Act-Assert, Keeping Test Setup (Don't Repeat Yourself) DRY with @Before, Understanding Test Fixture Instantiation
Section Introduction, What Is Mockito and What Are Mock Objects?, Introduction to Testing with Mock Objects, Configuring Projects Using Mockito, Creating a Project Which Uses JUnit and Mockito, Coding a Layered Architecture - Presentation Layer, Coding a Layered Architecture - Business Layer, Coding a Layered Architecture - Persistence Layer, Putting the Correct Packages in Place to Respect the layering, Writing a Test for the Login Controller in the Presentation Layer, Understanding the Test Fixture Setup While Writing Mock Object-based Unit Tests, Writing a Test for the Authentication Service in the Business Layer, Thinking about Design Decisions When Unit Testing
Section Introduction, Evolving the Domain and Repository Classes, Ignoring Tests with @ignore, Implementing a Finder in the Repository, Implementing Business Logic in the Service, Configuring Maven to Use Java 8, Evolving the Repository Class, Adding a Parameter-driven Finder to the Service, Refactoring to Evolve a New Service, Generating Test Methods in the IDE and Toggling Between Production and Test Code, Introducing the JUnit Mockito Runner and @Mock, Analyzing the Production Code to Determine How to Write the Arrange Section, Using Mockito's @InjectMocks to Create the System Under Test with its Dependencies, Keep Yourself Motivated by Checking the Happy Path Test Output, Using the JUnit Assertions API to Write the Assert Section, Thinking about the Weaknesses of the JUnit Assertions API, Importance of Checking Your Work as You Go!, Upgrading a JUnit Project to Use the Full Hamcrest Version, Replacing JUnit Assertions with Hamcrest Assertions and Using Assertions with Collections, Understanding and Reading Hamcrest Test Failures, Quick Thoughts on Hamcrest Individual vs Collection Assertions, Do Not Invoke Unneeded Production Code in Your Test Classes, Understanding Evaluation of Hamcrest Matchers, Thinking about Keeping Production Code to a Minimum in Tests, Creating Complex Hamcrest Assertions with allOf Method and Property Matchers