How to write JUnit test code in Java for the function of finding the factorial of a given number?

This is the JUnit 5 solution to cover all kinds of inputs provided to find the factorial of a given number. This Unit test executes tests for the ‘RdInput’ function available in the class ‘FactorialOfNumJ8’.

package pack1;

import java.math.BigInteger;

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 JUnitTestFactorialOfNumJ8 {

	FactorialOfNum_Using_CoreLogic FNUCL;
	FactorialOfNum_Using_Recursion FNUR;
	FactorialOfNum_Using_Stream FNUS;

	@BeforeEach
	void setUp() throws Exception {

		FNUCL = new FactorialOfNum_Using_CoreLogic();
		FNUR = new FactorialOfNum_Using_Recursion();
		FNUS = new FactorialOfNum_Using_Stream();
	}

	@Test
	@DisplayName("Positive inputs - Exp value and Actual matches")
	void test1() {

		Assertions.assertEquals(new BigInteger("3628800"), FNUCL.RdInput(BigInteger.valueOf(10)));
		Assertions.assertEquals(new BigInteger("1307674368000"), FNUR.RdInput(BigInteger.valueOf(15)));
		Assertions.assertEquals(new BigInteger("121645100408832000"), FNUS.RdInput(BigInteger.valueOf(19)));
	}

	@Test
	@DisplayName("Positive inputs - Exp value and Actual matches")
	void test2() {

		Assertions.assertTrue(FNUCL.RdInput(BigInteger.valueOf(8)).compareTo(new BigInteger("40320")) == 0);
		Assertions.assertTrue(FNUR.RdInput(BigInteger.valueOf(13)).compareTo(new BigInteger("6227020800")) == 0);
		Assertions.assertTrue(FNUS.RdInput(BigInteger.valueOf(17)).compareTo(new BigInteger("355687428096000")) == 0);
	}

	@Test
	@DisplayName("Negative inputs - Exp value and Actual not matches")
	void test3() {

		Assertions.assertNotEquals(new BigInteger("548800"), FNUCL.RdInput(BigInteger.valueOf(10)));
		Assertions.assertNotEquals(new BigInteger("654674368000"), FNUR.RdInput(BigInteger.valueOf(15)));
		Assertions.assertNotEquals(new BigInteger("76545100408832000"), FNUS.RdInput(BigInteger.valueOf(19)));
	}

	@Test
	@DisplayName("Negative inputs - Exp value and Actual not matches")
	void test4() {

		Assertions.assertFalse(FNUCL.RdInput(BigInteger.valueOf(8)).compareTo(new BigInteger("54205")) == 0);
		Assertions.assertFalse(FNUR.RdInput(BigInteger.valueOf(13)).compareTo(new BigInteger("67020800")) == 0);
		Assertions.assertFalse(FNUS.RdInput(BigInteger.valueOf(17)).compareTo(new BigInteger("5653487428096000")) == 0);
	}

	@Test
	@DisplayName("Null inputs - Factorial of Null not exits")
	void test5() {

		Assertions.assertEquals(new BigInteger("-1"), FNUCL.RdInput(null));
		Assertions.assertEquals(new BigInteger("-1"), FNUR.RdInput(null));
		Assertions.assertEquals(new BigInteger("-1"), FNUS.RdInput(null));
	}
}
Output:
Mar 31, 2023 9:41:57 PM pack1.FactorialOfNum_Using_CoreLogic RdInput
INFO: This method 'RdInput' called from the Class 'pack1.JUnitTestFactorialOfNumJ8'
Mar 31, 2023 9:41:57 PM pack1.NumberInput validateInputs
INFO: This method 'validateInputs()' called from the Class 'pack1.FactorialOfNum_Using_CoreLogic'
Mar 31, 2023 9:41:57 PM pack1.NumberInput validateInputs
INFO: The provided Input validated Successfully

Factorial of 10 is 3628800
Mar 31, 2023 9:41:57 PM pack1.FactorialOfNum_Using_Recursion RdInput
INFO: This method 'RdInput' called from the Class 'pack1.JUnitTestFactorialOfNumJ8'
Mar 31, 2023 9:41:57 PM pack1.NumberInput validateInputs
INFO: This method 'validateInputs()' called from the Class 'pack1.FactorialOfNum_Using_Recursion'
Mar 31, 2023 9:41:57 PM pack1.NumberInput validateInputs
INFO: The provided Input validated Successfully

Factorial of 15 is 1307674368000
Mar 31, 2023 9:41:57 PM pack1.FactorialOfNum_Using_Stream RdInput
INFO: This method 'RdInput' called from the Class 'pack1.JUnitTestFactorialOfNumJ8'
Mar 31, 2023 9:41:57 PM pack1.NumberInput validateInputs
INFO: This method 'validateInputs()' called from the Class 'pack1.FactorialOfNum_Using_Stream'
Mar 31, 2023 9:41:57 PM pack1.NumberInput validateInputs
INFO: The provided Input validated Successfully

Factorial of 19 is 121645100408832000
Mar 31, 2023 9:41:57 PM pack1.FactorialOfNum_Using_CoreLogic RdInput
INFO: This method 'RdInput' called from the Class 'pack1.JUnitTestFactorialOfNumJ8'
Mar 31, 2023 9:41:57 PM pack1.NumberInput validateInputs
INFO: This method 'validateInputs()' called from the Class 'pack1.FactorialOfNum_Using_CoreLogic'
Mar 31, 2023 9:41:57 PM pack1.NumberInput validateInputs
INFO: The provided Input validated Successfully

Factorial of 8 is 40320
Mar 31, 2023 9:41:57 PM pack1.FactorialOfNum_Using_Recursion RdInput
INFO: This method 'RdInput' called from the Class 'pack1.JUnitTestFactorialOfNumJ8'
Mar 31, 2023 9:41:57 PM pack1.NumberInput validateInputs
INFO: This method 'validateInputs()' called from the Class 'pack1.FactorialOfNum_Using_Recursion'
Mar 31, 2023 9:41:57 PM pack1.NumberInput validateInputs
INFO: The provided Input validated Successfully

Factorial of 13 is 6227020800
Mar 31, 2023 9:41:57 PM pack1.FactorialOfNum_Using_Stream RdInput
INFO: This method 'RdInput' called from the Class 'pack1.JUnitTestFactorialOfNumJ8'
Mar 31, 2023 9:41:57 PM pack1.NumberInput validateInputs
INFO: This method 'validateInputs()' called from the Class 'pack1.FactorialOfNum_Using_Stream'
Mar 31, 2023 9:41:57 PM pack1.NumberInput validateInputs
INFO: The provided Input validated Successfully

Factorial of 17 is 355687428096000
Mar 31, 2023 9:41:57 PM pack1.FactorialOfNum_Using_CoreLogic RdInput
INFO: This method 'RdInput' called from the Class 'pack1.JUnitTestFactorialOfNumJ8'
Mar 31, 2023 9:41:57 PM pack1.NumberInput validateInputs
INFO: This method 'validateInputs()' called from the Class 'pack1.FactorialOfNum_Using_CoreLogic'
Mar 31, 2023 9:41:57 PM pack1.NumberInput validateInputs
INFO: The provided Input validated Successfully

Factorial of 10 is 3628800
Mar 31, 2023 9:41:57 PM pack1.FactorialOfNum_Using_Recursion RdInput
INFO: This method 'RdInput' called from the Class 'pack1.JUnitTestFactorialOfNumJ8'
Mar 31, 2023 9:41:57 PM pack1.NumberInput validateInputs
INFO: This method 'validateInputs()' called from the Class 'pack1.FactorialOfNum_Using_Recursion'
Mar 31, 2023 9:41:57 PM pack1.NumberInput validateInputs
INFO: The provided Input validated Successfully

Factorial of 15 is 1307674368000
Mar 31, 2023 9:41:57 PM pack1.FactorialOfNum_Using_Stream RdInput
INFO: This method 'RdInput' called from the Class 'pack1.JUnitTestFactorialOfNumJ8'
Mar 31, 2023 9:41:57 PM pack1.NumberInput validateInputs
INFO: This method 'validateInputs()' called from the Class 'pack1.FactorialOfNum_Using_Stream'
Mar 31, 2023 9:41:57 PM pack1.NumberInput validateInputs
INFO: The provided Input validated Successfully

Factorial of 19 is 121645100408832000
Mar 31, 2023 9:41:57 PM pack1.FactorialOfNum_Using_CoreLogic RdInput
INFO: This method 'RdInput' called from the Class 'pack1.JUnitTestFactorialOfNumJ8'
Mar 31, 2023 9:41:57 PM pack1.NumberInput validateInputs
INFO: This method 'validateInputs()' called from the Class 'pack1.FactorialOfNum_Using_CoreLogic'
Mar 31, 2023 9:41:57 PM pack1.NumberInput validateInputs
INFO: The provided Input validated Successfully

Factorial of 8 is 40320
Mar 31, 2023 9:41:57 PM pack1.FactorialOfNum_Using_Recursion RdInput
INFO: This method 'RdInput' called from the Class 'pack1.JUnitTestFactorialOfNumJ8'
Mar 31, 2023 9:41:57 PM pack1.NumberInput validateInputs
INFO: This method 'validateInputs()' called from the Class 'pack1.FactorialOfNum_Using_Recursion'
Mar 31, 2023 9:41:57 PM pack1.NumberInput validateInputs
INFO: The provided Input validated Successfully

Factorial of 13 is 6227020800
Mar 31, 2023 9:41:57 PM pack1.FactorialOfNum_Using_Stream RdInput
INFO: This method 'RdInput' called from the Class 'pack1.JUnitTestFactorialOfNumJ8'
Mar 31, 2023 9:41:57 PM pack1.NumberInput validateInputs
INFO: This method 'validateInputs()' called from the Class 'pack1.FactorialOfNum_Using_Stream'
Mar 31, 2023 9:41:57 PM pack1.NumberInput validateInputs
INFO: The provided Input validated Successfully

Factorial of 17 is 355687428096000
Mar 31, 2023 9:41:57 PM pack1.FactorialOfNum_Using_CoreLogic RdInput
INFO: This method 'RdInput' called from the Class 'pack1.JUnitTestFactorialOfNumJ8'
Mar 31, 2023 9:41:57 PM pack1.NumberInput validateInputs
INFO: This method 'validateInputs()' called from the Class 'pack1.FactorialOfNum_Using_CoreLogic'
Mar 31, 2023 9:41:57 PM pack1.FactorialOfNum_Using_CoreLogic RdInput
INFO: The given Input number is null
Factorial of Null not exits
Mar 31, 2023 9:41:57 PM pack1.FactorialOfNum_Using_Recursion RdInput
INFO: This method 'RdInput' called from the Class 'pack1.JUnitTestFactorialOfNumJ8'
Mar 31, 2023 9:41:57 PM pack1.NumberInput validateInputs
INFO: This method 'validateInputs()' called from the Class 'pack1.FactorialOfNum_Using_Recursion'
Mar 31, 2023 9:41:57 PM pack1.FactorialOfNum_Using_Recursion RdInput
INFO: The given Input number is null
Factorial of Null not exits
Mar 31, 2023 9:41:57 PM pack1.FactorialOfNum_Using_Stream RdInput
INFO: This method 'RdInput' called from the Class 'pack1.JUnitTestFactorialOfNumJ8'
Mar 31, 2023 9:41:57 PM pack1.NumberInput validateInputs
INFO: This method 'validateInputs()' called from the Class 'pack1.FactorialOfNum_Using_Stream'
Mar 31, 2023 9:41:57 PM pack1.FactorialOfNum_Using_Stream RdInput
INFO: The given Input number is null
Factorial of Null not exits