Loading...

Go Back

Next page
Go Back Course Outline

Java Full Course


Testing in Java

Java Testing Guide

JUnit Basics

JUnit is the most popular testing framework for Java.

Key Annotations

  • @Test - Marks a method as a test method
  • @BeforeEach - Executed before each test
  • @AfterEach - Executed after each test
  • @BeforeAll - Executed once before all tests
  • @AfterAll - Executed once after all tests

Basic Test Example

import org.junit.jupiter.api.*;
import static org.junit.jupiter.api.Assertions.*;

public class CalculatorTest {

    private Calculator calculator;

    @BeforeEach
    void setUp() {
        calculator = new Calculator();
    }

    @Test
    void testAddition() {
        assertEquals(5, calculator.add(2, 3));
    }

    @Test
    void testSubtraction() {
        assertEquals(1, calculator.subtract(4, 3));
    }
}
    
    

Writing Unit Tests

Unit tests focus on small, isolated pieces of functionality.

Characteristics of Good Tests

  • Test one thing at a time
  • Follow Arrange-Act-Assert pattern
  • Have clear and descriptive names
  • Be independent of other tests
  • Run quickly

Example: Arrange-Act-Assert

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

public class BankAccountTest {

    @Test
    void deposit_shouldIncreaseBalance() {
        // Arrange
        BankAccount account = new BankAccount(100);
        
        // Act
        account.deposit(50);
        
        // Assert
        assertEquals(150, account.getBalance());
    }

    @Test
    void withdraw_withSufficientFunds_shouldDecreaseBalance() {
        BankAccount account = new BankAccount(200);
        account.withdraw(75);
        assertEquals(125, account.getBalance());
    }
}
    
    

Assertions and Test Suites

Assertions verify that the actual result matches the expected result.

Common Assertions

  • assertEquals(expected, actual)
  • assertTrue(condition)
  • assertFalse(condition)
  • assertNull(object)
  • assertNotNull(object)
  • assertThrows(exception, executable)

Test Suite Example

import org.junit.platform.suite.api.SelectClasses;
import org.junit.platform.suite.api.Suite;

@Suite
@SelectClasses({
    CalculatorTest.class,
    BankAccountTest.class,
    UserServiceTest.class
})
public class AllTestsSuite {
    // This class remains empty
}

// Assertion examples
@Test
void testVariousAssertions() {
    assertEquals(4, 2 + 2);
    assertTrue(5 > 3);
    assertNull(null);
    assertThrows(ArithmeticException.class, () -> {
        int result = 10 / 0;
    });
}
    
    

Test-Driven Development (TDD)

TDD is a software development approach where tests are written before the implementation.

TDD Cycle

  1. RED: Write a failing test
  2. GREEN: Write minimal code to pass the test
  3. REFACTOR: Improve code quality

TDD Example: FizzBuzz

// Step 1: RED - Write failing test
@Test
void fizzBuzz_returnsFizzForMultiplesOf3() {
    assertEquals("Fizz", fizzBuzz(3));
    assertEquals("Fizz", fizzBuzz(6));
}

// Step 2: GREEN - Minimal implementation
public String fizzBuzz(int number) {
    if (number % 3 == 0) {
        return "Fizz";
    }
    return String.valueOf(number);
}

// Step 3: Add test for multiples of 5
@Test
void fizzBuzz_returnsBuzzForMultiplesOf5() {
    assertEquals("Buzz", fizzBuzz(5));
    assertEquals("Buzz", fizzBuzz(10));
}

// Step 4: Update implementation
public String fizzBuzz(int number) {
    if (number % 3 == 0) {
        return "Fizz";
    }
    if (number % 5 == 0) {
        return "Buzz";
    }
    return String.valueOf(number);
}

// Step 5: Add test for multiples of both 3 and 5
@Test
void fizzBuzz_returnsFizzBuzzForMultiplesOf3And5() {
    assertEquals("FizzBuzz", fizzBuzz(15));
    assertEquals("FizzBuzz", fizzBuzz(30));
}

// Step 6: Final implementation
public String fizzBuzz(int number) {
    if (number % 15 == 0) {
        return "FizzBuzz";
    }
    if (number % 3 == 0) {
        return "Fizz";
    }
    if (number % 5 == 0) {
        return "Buzz";
    }
    return String.valueOf(number);
}
    
    
Go Back

Next page