How to write JUnit test code in Java for the function finding Triplets who sum divisible by 9 from given array of Integers ?

This is the JUnit 5 solution to cover all kinds of inputs provided to find the Triplets whose sum divisible by 9 from an array of integers. This Unit test executes tests for the ‘ParseAnArrayInput’ function available in the class ‘TripletsSumDivBy9J8’.

package pack1;

import java.util.Arrays;
import java.util.List;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

class JunitTestTripletsSumDivBy9J8 {

	TripletsSumDivBy9_Using_Arrays TSDBUA;
	TripletsSumDivBy9_Using_Predicates TSDBUP;
	TripletsSumDivBy9_Using_Stream_and_Predicates TSDBUSP;

	@BeforeEach
	void setUp() throws Exception {
		TSDBUA = new TripletsSumDivBy9_Using_Arrays();
		TSDBUP = new TripletsSumDivBy9_Using_Predicates();
		TSDBUSP = new TripletsSumDivBy9_Using_Stream_and_Predicates();
	}

	@Test
	@DisplayName("Positive inputs - Exp value and Actual matches")
	void test1() {
		List<List<Integer>> expectedList1 = Arrays.asList(Arrays.asList(90, 9, 0), Arrays.asList(90, 9, 54),
				Arrays.asList(90, 0, 54), Arrays.asList(9, 0, 54));
		Assertions.assertEquals(expectedList1, TSDBUA.ParseAnArrayInput(new Integer[] { 90, 9, 0, 54, 32, 51 }));

		List<List<Integer>> expectedList2 = Arrays.asList(Arrays.asList(4, 13, 10), Arrays.asList(4, 13, 37),
				Arrays.asList(4, 15, 8), Arrays.asList(13, 15, 8), Arrays.asList(10, 15, 2), Arrays.asList(15, 2, 37));
		Assertions.assertEquals(expectedList2, TSDBUP.ParseAnArrayInput(new Integer[] { 4, 13, 10, 15, 2, 37, 8 }));

		List<List<Integer>> expectedList3 = Arrays.asList(Arrays.asList(14, 20, 11), Arrays.asList(14, 20, 29),
				Arrays.asList(14, 11, 29), Arrays.asList(14, 5, 17), Arrays.asList(20, 11, 5), Arrays.asList(20, 5, 29),
				Arrays.asList(11, 5, 29));
		Assertions.assertEquals(expectedList3, TSDBUSP.ParseAnArrayInput(new Integer[] { 14, 20, 11, 5, 29, 17, 58 }));
	}

	@Test
	@DisplayName("Negative inputs - Exp value and Actual does not matches")
	void test2() {
		List<List<Integer>> expectedList1 = Arrays.asList(Arrays.asList(190, 9, 40), Arrays.asList(90, 9, 54),
				Arrays.asList(90, 0, 54), Arrays.asList(9, 0, 54));
		Assertions.assertNotEquals(expectedList1, TSDBUA.ParseAnArrayInput(new Integer[] { 59, 0, 54, 32, 51 }));

		List<List<Integer>> expectedList2 = Arrays.asList(Arrays.asList(24, 63, 10), Arrays.asList(4, 13, 37),
				Arrays.asList(4, 15, 8), Arrays.asList(13, 15, 8), Arrays.asList(10, 15, 2), Arrays.asList(15, 2, 37));
		Assertions.assertNotEquals(expectedList2, TSDBUP.ParseAnArrayInput(new Integer[] { 4, 13, 10, 2, 37, 8 }));

		List<List<Integer>> expectedList3 = Arrays.asList(Arrays.asList(58, 9, 31), Arrays.asList(21, 5, 73),
				Arrays.asList(14, 11, 29), Arrays.asList(14, 5, 17), Arrays.asList(20, 11, 5), Arrays.asList(20, 5, 29),
				Arrays.asList(11, 5, 29));
		Assertions.assertNotEquals(expectedList3, TSDBUSP.ParseAnArrayInput(new Integer[] { 11, 5, 29, 17, 58 }));
	}

	@Test
	@DisplayName("Null Array inputs")
	void test3() {
		Assertions.assertEquals(Arrays.asList(), TSDBUA.ParseAnArrayInput(null));

		Assertions.assertEquals(Arrays.asList(), TSDBUP.ParseAnArrayInput(null));

		Assertions.assertEquals(Arrays.asList(), TSDBUSP.ParseAnArrayInput(null));
	}

	@Test
	@DisplayName("Empty Array inputs")
	void test4() {
		Assertions.assertEquals(Arrays.asList(), TSDBUA.ParseAnArrayInput(new Integer[] {}));

		Assertions.assertEquals(Arrays.asList(), TSDBUP.ParseAnArrayInput(new Integer[] {}));

		Assertions.assertEquals(Arrays.asList(), TSDBUSP.ParseAnArrayInput(new Integer[] {}));
	}
}
Output:

Mar 10, 2023 12:22:04 PM pack1.TripletsSumDivBy9_Using_Arrays ParseAnArrayInput
INFO: This method 'ParseAnArrayInput' called from the Class 'pack1.JunitTestTripletsSumDivBy9J8'
Mar 10, 2023 12:22:04 PM pack1.ArrayInput validateInputs
INFO: This method 'validateInputs()' called from the Class 'pack1.TripletsSumDivBy9_Using_Arrays'
Mar 10, 2023 12:22:04 PM pack1.ArrayInput validateInputs
INFO: The provided Input validated Successfully
The given input Array values are
[ 90 9 0 54 32 51 ]
[[90, 9, 0], [90, 9, 54], [90, 0, 54], [9, 0, 54]]
Mar 10, 2023 12:22:04 PM pack1.TripletsSumDivBy9_Using_Predicates ParseAnArrayInput
INFO: This method 'ParseAnArrayInput' called from the Class 'pack1.JunitTestTripletsSumDivBy9J8'
Mar 10, 2023 12:22:04 PM pack1.ArrayInput validateInputs
INFO: This method 'validateInputs()' called from the Class 'pack1.TripletsSumDivBy9_Using_Predicates'
Mar 10, 2023 12:22:04 PM pack1.ArrayInput validateInputs
INFO: The provided Input validated Successfully
The given input Array values are
[ 4 13 10 15 2 37 8 ]
[[4, 13, 10], [4, 13, 37], [4, 15, 8], [13, 15, 8], [10, 15, 2], [15, 2, 37]]
Mar 10, 2023 12:22:04 PM pack1.TripletsSumDivBy9_Using_Stream_and_Predicates ParseAnArrayInput
INFO: This method 'ParseAnArrayInput' called from the Class 'pack1.JunitTestTripletsSumDivBy9J8'
Mar 10, 2023 12:22:04 PM pack1.ArrayInput validateInputs
INFO: This method 'validateInputs()' called from the Class 'pack1.TripletsSumDivBy9_Using_Stream_and_Predicates'
Mar 10, 2023 12:22:04 PM pack1.ArrayInput validateInputs
INFO: The provided Input validated Successfully
The given input Array values are
14 20 11 5 29 17 58 
The triplets of numbers which are divisible by 9
[[14, 20, 11], [14, 20, 29], [14, 11, 29], [14, 5, 17], [20, 11, 5], [20, 5, 29], [11, 5, 29]]
Mar 10, 2023 12:22:04 PM pack1.TripletsSumDivBy9_Using_Arrays ParseAnArrayInput
INFO: This method 'ParseAnArrayInput' called from the Class 'pack1.JunitTestTripletsSumDivBy9J8'
Mar 10, 2023 12:22:04 PM pack1.ArrayInput validateInputs
INFO: This method 'validateInputs()' called from the Class 'pack1.TripletsSumDivBy9_Using_Arrays'
Mar 10, 2023 12:22:04 PM pack1.ArrayInput validateInputs
INFO: The provided Input validated Successfully
The given input Array values are
[ 59 0 54 32 51 ]
[]
Mar 10, 2023 12:22:04 PM pack1.TripletsSumDivBy9_Using_Predicates ParseAnArrayInput
INFO: This method 'ParseAnArrayInput' called from the Class 'pack1.JunitTestTripletsSumDivBy9J8'
Mar 10, 2023 12:22:04 PM pack1.ArrayInput validateInputs
INFO: This method 'validateInputs()' called from the Class 'pack1.TripletsSumDivBy9_Using_Predicates'
Mar 10, 2023 12:22:04 PM pack1.ArrayInput validateInputs
INFO: The provided Input validated Successfully
The given input Array values are
[ 4 13 10 2 37 8 ]
[[4, 13, 10], [4, 13, 37]]
Mar 10, 2023 12:22:04 PM pack1.TripletsSumDivBy9_Using_Stream_and_Predicates ParseAnArrayInput
INFO: This method 'ParseAnArrayInput' called from the Class 'pack1.JunitTestTripletsSumDivBy9J8'
Mar 10, 2023 12:22:04 PM pack1.ArrayInput validateInputs
INFO: This method 'validateInputs()' called from the Class 'pack1.TripletsSumDivBy9_Using_Stream_and_Predicates'
Mar 10, 2023 12:22:04 PM pack1.ArrayInput validateInputs
INFO: The provided Input validated Successfully
The given input Array values are
11 5 29 17 58 
The triplets of numbers which are divisible by 9
[[11, 5, 29]]
Mar 10, 2023 12:22:04 PM pack1.TripletsSumDivBy9_Using_Arrays ParseAnArrayInput
INFO: This method 'ParseAnArrayInput' called from the Class 'pack1.JunitTestTripletsSumDivBy9J8'
Mar 10, 2023 12:22:04 PM pack1.ArrayInput validateInputs
INFO: This method 'validateInputs()' called from the Class 'pack1.TripletsSumDivBy9_Using_Arrays'
Mar 10, 2023 12:22:04 PM pack1.TripletsSumDivBy9_Using_Arrays ParseAnArrayInput
INFO: The given Input Array is null
[]
Mar 10, 2023 12:22:04 PM pack1.TripletsSumDivBy9_Using_Predicates ParseAnArrayInput
INFO: This method 'ParseAnArrayInput' called from the Class 'pack1.JunitTestTripletsSumDivBy9J8'
Mar 10, 2023 12:22:04 PM pack1.ArrayInput validateInputs
INFO: This method 'validateInputs()' called from the Class 'pack1.TripletsSumDivBy9_Using_Predicates'
Mar 10, 2023 12:22:04 PM pack1.TripletsSumDivBy9_Using_Predicates ParseAnArrayInput
INFO: The given Input Array is null
[]
Mar 10, 2023 12:22:04 PM pack1.TripletsSumDivBy9_Using_Stream_and_Predicates ParseAnArrayInput
INFO: This method 'ParseAnArrayInput' called from the Class 'pack1.JunitTestTripletsSumDivBy9J8'
Mar 10, 2023 12:22:04 PM pack1.ArrayInput validateInputs
INFO: This method 'validateInputs()' called from the Class 'pack1.TripletsSumDivBy9_Using_Stream_and_Predicates'
Mar 10, 2023 12:22:04 PM pack1.TripletsSumDivBy9_Using_Stream_and_Predicates ParseAnArrayInput
INFO: The given Input Array is null
[]
Mar 10, 2023 12:22:04 PM pack1.TripletsSumDivBy9_Using_Arrays ParseAnArrayInput
INFO: This method 'ParseAnArrayInput' called from the Class 'pack1.JunitTestTripletsSumDivBy9J8'
Mar 10, 2023 12:22:04 PM pack1.ArrayInput validateInputs
INFO: This method 'validateInputs()' called from the Class 'pack1.TripletsSumDivBy9_Using_Arrays'
Mar 10, 2023 12:22:04 PM pack1.ArrayInput validateInputs
INFO: The provided Input validated Successfully
The given input Array values are
[ ]
[]
Mar 10, 2023 12:22:04 PM pack1.TripletsSumDivBy9_Using_Predicates ParseAnArrayInput
INFO: This method 'ParseAnArrayInput' called from the Class 'pack1.JunitTestTripletsSumDivBy9J8'
Mar 10, 2023 12:22:04 PM pack1.ArrayInput validateInputs
INFO: This method 'validateInputs()' called from the Class 'pack1.TripletsSumDivBy9_Using_Predicates'
Mar 10, 2023 12:22:04 PM pack1.ArrayInput validateInputs
INFO: The provided Input validated Successfully
The given input Array values are
[ ]
[]
Mar 10, 2023 12:22:04 PM pack1.TripletsSumDivBy9_Using_Stream_and_Predicates ParseAnArrayInput
INFO: This method 'ParseAnArrayInput' called from the Class 'pack1.JunitTestTripletsSumDivBy9J8'
Mar 10, 2023 12:22:04 PM pack1.ArrayInput validateInputs
INFO: This method 'validateInputs()' called from the Class 'pack1.TripletsSumDivBy9_Using_Stream_and_Predicates'
Mar 10, 2023 12:22:04 PM pack1.ArrayInput validateInputs
INFO: The provided Input validated Successfully
The given input Array values are

The triplets of numbers which are divisible by 9
[]