JUnit assertArrayEquals Method

The assertArrayEquals method in JUnit is used to test if two arrays are equal. JUnit provides several overloaded versions of this method to handle different data types and to provide custom messages for test failures. This guide covers the basics of using the assertArrayEquals method, including its syntax and examples of its different overloads.

Table of Contents

  1. Introduction
  2. assertArrayEquals Method Syntax
  3. Examples
    • Basic Usage
    • Using a Custom Message
    • Using a Message Supplier
    • Handling Floating Point Numbers with Delta
  4. Real-World Use Case
  5. Conclusion

Introduction

The assertArrayEquals method in JUnit is an assertion method used to verify that two arrays are equal. If the arrays are not equal, the assertion fails, and the test is marked as failed. This method is fundamental for writing unit tests that check the correctness of array contents in your code.

assertArrayEquals Method Syntax

Here is the basic syntax of the assertArrayEquals method with its different overloads:

For Primitive Arrays

// boolean arrays
static void assertArrayEquals(boolean[] expected, boolean[] actual);
static void assertArrayEquals(boolean[] expected, boolean[] actual, String message);
static void assertArrayEquals(boolean[] expected, boolean[] actual, Supplier<String> messageSupplier);

// byte arrays
static void assertArrayEquals(byte[] expected, byte[] actual);
static void assertArrayEquals(byte[] expected, byte[] actual, String message);
static void assertArrayEquals(byte[] expected, byte[] actual, Supplier<String> messageSupplier);

// char arrays
static void assertArrayEquals(char[] expected, char[] actual);
static void assertArrayEquals(char[] expected, char[] actual, String message);
static void assertArrayEquals(char[] expected, char[] actual, Supplier<String> messageSupplier);

// double arrays
static void assertArrayEquals(double[] expected, double[] actual);
static void assertArrayEquals(double[] expected, double[] actual, double delta);
static void assertArrayEquals(double[] expected, double[] actual, double delta, String message);
static void assertArrayEquals(double[] expected, double[] actual, double delta, Supplier<String> messageSupplier);
static void assertArrayEquals(double[] expected, double[] actual, String message);
static void assertArrayEquals(double[] expected, double[] actual, Supplier<String> messageSupplier);

// float arrays
static void assertArrayEquals(float[] expected, float[] actual);
static void assertArrayEquals(float[] expected, float[] actual, float delta);
static void assertArrayEquals(float[] expected, float[] actual, float delta, String message);
static void assertArrayEquals(float[] expected, float[] actual, float delta, Supplier<String> messageSupplier);
static void assertArrayEquals(float[] expected, float[] actual, String message);
static void assertArrayEquals(float[] expected, float[] actual, Supplier<String> messageSupplier);

// int arrays
static void assertArrayEquals(int[] expected, int[] actual);
static void assertArrayEquals(int[] expected, int[] actual, String message);
static void assertArrayEquals(int[] expected, int[] actual, Supplier<String> messageSupplier);

// long arrays
static void assertArrayEquals(long[] expected, long[] actual);
static void assertArrayEquals(long[] expected, long[] actual, String message);
static void assertArrayEquals(long[] expected, long[] actual, Supplier<String> messageSupplier);

// short arrays
static void assertArrayEquals(short[] expected, short[] actual);
static void assertArrayEquals(short[] expected, short[] actual, String message);
static void assertArrayEquals(short[] expected, short[] actual, Supplier<String> messageSupplier);

For Object Arrays

// Object arrays
static void assertArrayEquals(Object[] expected, Object[] actual);
static void assertArrayEquals(Object[] expected, Object[] actual, String message);
static void assertArrayEquals(Object[] expected, Object[] actual, Supplier<String> messageSupplier);

Parameters:

  • expected: The expected array.
  • actual: The actual array produced by the code.
  • message: Optional. A custom message to display if the assertion fails.
  • messageSupplier: Optional. A supplier that provides a custom message to display if the assertion fails.
  • delta: Used for comparing floating-point numbers to account for precision errors.

Returns:

  • Nothing. The method throws an assertion error if the arrays are not equal.

Examples

Basic Usage

Compare two integer arrays to ensure they are equal.

Example

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

public class ArrayTest {
    @Test
    void testIntArrayEquality() {
        int[] expected = {1, 2, 3};
        int[] actual = {1, 2, 3};
        assertArrayEquals(expected, actual);
    }
}

Using a Custom Message

Include a custom message to display if the assertion fails.

Example

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

public class CustomMessageTest {
    @Test
    void testIntArrayEqualityWithMessage() {
        int[] expected = {1, 2, 3};
        int[] actual = {1, 2, 4};
        assertArrayEquals(expected, actual, "The arrays should be equal");
    }
}

Using a Message Supplier

Use a message supplier to lazily generate a custom message if the assertion fails.

Example

import static org.junit.jupiter.api.Assertions.assertArrayEquals;
import org.junit.jupiter.api.Test;
import java.util.function.Supplier;

public class MessageSupplierTest {
    @Test
    void testIntArrayEqualityWithMessageSupplier() {
        int[] expected = {1, 2, 3};
        int[] actual = {1, 2, 4};
        Supplier<String> messageSupplier = () -> "The arrays should be equal";
        assertArrayEquals(expected, actual, messageSupplier);
    }
}

Handling Floating Point Numbers with Delta

Compare two double arrays with a delta to account for precision errors.

Example

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

public class FloatingPointArrayTest {
    @Test
    void testDoubleArrayEquality() {
        double[] expected = {1.0, 2.0, 3.0};
        double[] actual = {1.0, 2.0, 3.001};
        assertArrayEquals(expected, actual, 0.01);
    }
}

Real-World Use Case

Testing a BookService Class

A common use case for assertArrayEquals is testing methods that return arrays in a BookService class. For example, verifying that the method returns the correct list of book titles.

Class Under Test – BookService

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

import java.util.Arrays;

public class BookService {
    public String[] getBookTitles() {
        return new String[]{"Effective Java", "Clean Code", "JUnit in Action"};
    }
}

Test Class – BookServiceTest

public class BookServiceTest {
    private final BookService bookService = new BookService();

    @Test
    void testGetBookTitles() {
        String[] expected = {"Effective Java", "Clean Code", "JUnit in Action"};
        String[] actual = bookService.getBookTitles();
        assertArrayEquals(expected, actual, "The book titles should match the expected titles");
    }
}

In this example, the BookServiceTest class tests the getBookTitles method of the BookService class using assertArrayEquals. It includes a test to ensure that the method returns the correct list of book titles.

Conclusion

The assertArrayEquals method in JUnit is used for verifying that two arrays are equal in your tests. By using assertArrayEquals and its various overloads, you can compare arrays of different data types, provide custom messages for test failures, and handle floating-point precision issues. Understanding and using the assertArrayEquals method effectively is crucial for developing robust and maintainable Java applications.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top