Asserts are the core heart of all test cases. it needs to evaluate true in order for a test cases to pass. JUnit 5 provides a lot of new assert over JUnit 4. asserts can be used with java 8 lambda also. All asserts of Junit 5 are static methods and are defined in org.junit.jupiter.api.Assertions
class.
we have multiple ways to validate a response like assertTrue
, assertFalse
, assertNull
, assertNotNull
, assertEquals
, assertNotEquals
, assertArrayEquals
, assertSame
, assertNotSame
or assertAll
to validate multiple responses together.
All assert methods have multiple overloaded methods for all data type ie int
, short
, float
, char
etc.
All assertions of JUnit 5 have the same structure.
public static void assert...(expected, actual)
public static void assert...(expected, actual, String message)
public static void assert...(expected, actual, Supplier<String> messageSupplier)
Assert True
assertTrue indicates that if the result return from the method is true then the test will be considered as pass.
package com.example.junit5.sujan;
public class AppleCalculator {
public boolean booleanApple(String appleText) {
return "apple".equals(appleText);
}
}
package com.example.junit5.sujan;
import org.junit.jupiter.api.Test;
import java.util.function.Supplier;
import static org.junit.jupiter.api.Assertions.assertTrue;
class AppleCalculatorTest {
@Test
void assertTrueTest() {
AppleCalculator appleCalculator = new AppleCalculator();
assertTrue(appleCalculator.booleanApple("apple"));
assertTrue(appleCalculator.booleanApple("apple"), "we love apple");
Supplier<String> messageSupplier = () -> "we love apple";
assertTrue(appleCalculator.booleanApple("apple"), messageSupplier);
}
}
plugins {
id 'java'
}
group 'org.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
testImplementation('org.junit.jupiter:junit-jupiter:5.6.2')
}
Assert False
assertFalse indicates that if the result return from the method is false then the test will be considered as pass.
package com.example.junit5.sujan;
public class AppleCalculator {
public boolean booleanApple(String appleText) {
return "apple".equals(appleText);
}
}
package com.example.junit5.sujan;
import org.junit.jupiter.api.Test;
import java.util.function.Supplier;
import static org.junit.jupiter.api.Assertions.assertFalse;
class AppleCalculatorTest {
@Test
void assertFalseTest() {
AppleCalculator appleCalculator = new AppleCalculator();
assertFalse(appleCalculator.booleanApple("apple"));
assertFalse(appleCalculator.booleanApple("apple"), "we love apple");
Supplier<String> messageSupplier = () -> "we love apple";
assertFalse(appleCalculator.booleanApple("apple"), messageSupplier);
}
}
plugins {
id 'java'
}
group 'org.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
testImplementation('org.junit.jupiter:junit-jupiter:5.6.2')
}
Assert Null
assertNull indicates that if the result return from the method is null then the test will be considered as pass.
package com.example.junit5.sujan;
public class AppleCalculator {
public Object booleanApple(String appleText) {
if ("apple".equals(appleText)) {
return null;
} else {
return new Object();
}
}
}
package com.example.junit5.sujan;
import org.junit.jupiter.api.Test;
import java.util.function.Supplier;
import static org.junit.jupiter.api.Assertions.assertNull;
class AppleCalculatorTest {
@Test
void assertFalseTest() {
AppleCalculator appleCalculator = new AppleCalculator();
assertNull(appleCalculator.booleanApple("apple"));
assertNull(appleCalculator.booleanApple("apple"), "we love apple");
Supplier<String> messageSupplier = () -> "we love apple";
assertNull(appleCalculator.booleanApple("apple"), messageSupplier);
}
}
plugins {
id 'java'
}
group 'org.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
testImplementation('org.junit.jupiter:junit-jupiter:5.6.2')
}
Assert Not Null
assertNotNull indicates that if the result return from the method is not null then the test will be considered as pass.
package com.example.junit5.sujan;
public class AppleCalculator {
public Object booleanApple(String appleText) {
if ("apple".equals(appleText)) {
return null;
} else {
return new Object();
}
}
}
package com.example.junit5.sujan;
import org.junit.jupiter.api.Test;
import java.util.function.Supplier;
import static org.junit.jupiter.api.Assertions.assertNotNull;
class AppleCalculatorTest {
@Test
void assertNotNullTest() {
AppleCalculator appleCalculator = new AppleCalculator();
assertNotNull(appleCalculator.booleanApple("orange"));
assertNotNull(appleCalculator.booleanApple("orange"), "we love apple");
Supplier<String> messageSupplier = () -> "we love apple";
assertNotNull(appleCalculator.booleanApple("orange"), messageSupplier);
}
}
plugins {
id 'java'
}
group 'org.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
testImplementation('org.junit.jupiter:junit-jupiter:5.6.2')
}
Assert Equals
assertEquals indicate that if the actual result return from the method is equal to excepted result then the test will be considered as pass.
package com.example.junit5.sujan;
public class AppleCalculator {
public int addApple(int apple1, int apple2) {
return apple1 + apple2;
}
}
package com.example.junit5.sujan;
import org.junit.jupiter.api.Test;
import java.util.function.Supplier;
import static org.junit.jupiter.api.Assertions.assertEquals;
class AppleCalculatorTest {
@Test
void assertEqualsTest() {
AppleCalculator appleCalculator = new AppleCalculator();
assertEquals(2, appleCalculator.addApple(1, 1));
assertEquals(2, appleCalculator.addApple(1, 1), "we love apple");
Supplier<String> messageSupplier = () -> "we love apple";
assertEquals(2, appleCalculator.addApple(1, 1), messageSupplier);
}
}
plugins {
id 'java'
}
group 'org.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
testImplementation('org.junit.jupiter:junit-jupiter:5.6.2')
}
Assert Not Equals
assertNotEquals indicate that if the actual result return from the method is equal to excepted result then the test will be considered as pass.
package com.example.junit5.sujan;
public class AppleCalculator {
public int addApple(int apple1, int apple2) {
return apple1 + apple2;
}
}
package com.example.junit5.sujan;
import org.junit.jupiter.api.Test;
import java.util.function.Supplier;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
class AppleCalculatorTest {
@Test
void assertNotEqualsTest() {
AppleCalculator appleCalculator = new AppleCalculator();
assertNotEquals(1, appleCalculator.addApple(1, 1));
assertNotEquals(1, appleCalculator.addApple(1, 1), "we love apple");
Supplier<String> messageSupplier = () -> "we love apple";
assertNotEquals(1, appleCalculator.addApple(1, 1), messageSupplier);
}
}
plugins {
id 'java'
}
group 'org.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
testImplementation('org.junit.jupiter:junit-jupiter:5.6.2')
}
Assert Equals with Delta
Different machines or underlaying architecture, we might get different decimal numbers which might lead to our test case failure, to incorporate that assertEquals for float and double takes an extra value of delta, the result returned within the delta of the expected result will still consider as passed.
package com.example.junit5.sujan;
public class AppleCalculator {
public float addAppleFloat(int apple1, int apple2) {
return (float) apple1 + apple2;
}
public double addAppleDouble(int apple1, int apple2) {
return (float) apple1 + apple2;
}
}
package com.example.junit5.sujan;
import org.junit.jupiter.api.Test;
import java.util.function.Supplier;
import static org.junit.jupiter.api.Assertions.assertEquals;
class AppleCalculatorTest {
@Test
void assertEqualsTestFloat() {
AppleCalculator appleCalculator = new AppleCalculator();
assertEquals(2.5f, appleCalculator.addAppleFloat(1, 1), 0.5);
assertEquals(2.5f, appleCalculator.addAppleFloat(1, 1), 0.5, "we love apple");
Supplier<String> messageSupplier = () -> "we love apple";
assertEquals(2.5f, appleCalculator.addAppleFloat(1, 1), 0.5, messageSupplier);
}
@Test
void assertEqualsDouble() {
AppleCalculator appleCalculator = new AppleCalculator();
assertEquals(2.5d, appleCalculator.addAppleDouble(1, 1), 0.5);
assertEquals(2.5d, appleCalculator.addAppleDouble(1, 1), 0.5, "we love apple");
Supplier<String> messageSupplier = () -> "we love apple";
assertEquals(2.5d, appleCalculator.addAppleDouble(1, 1), 0.5, messageSupplier);
}
}
plugins {
id 'java'
}
group 'org.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
testImplementation('org.junit.jupiter:junit-jupiter:5.6.2')
}
Assert Same
assertSame indicate that if the actual result return from the method is the same as excepted result then the test will be considered as pass.
package com.example.junit5.sujan;
public class AppleCalculator {
public String getApple() {
return "apple";
}
}
package com.example.junit5.sujan;
import org.junit.jupiter.api.Test;
import java.util.function.Supplier;
import static org.junit.jupiter.api.Assertions.assertSame;
class AppleCalculatorTest {
@Test
void assertSameTest() {
AppleCalculator appleCalculator = new AppleCalculator();
assertSame("apple", appleCalculator.getApple());
assertSame("apple", appleCalculator.getApple(), "we love apple");
Supplier<String> messageSupplier = () -> "we love apple";
assertSame("apple", appleCalculator.getApple(), messageSupplier);
}
}
plugins {
id 'java'
}
group 'org.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
testImplementation('org.junit.jupiter:junit-jupiter:5.6.2')
}
Assert Same
assertNotSame indicate that if the actual result return from the method is the same as excepted result then the test will be considered as pass.
package com.example.junit5.sujan;
public class AppleCalculator {
public String getApple() {
return "apple";
}
}
package com.example.junit5.sujan;
import org.junit.jupiter.api.Test;
import java.util.function.Supplier;
import static org.junit.jupiter.api.Assertions.assertNotSame;
class AppleCalculatorTest {
@Test
void assertNotSameTest() {
AppleCalculator appleCalculator = new AppleCalculator();
assertNotSame("orange", appleCalculator.getApple());
assertNotSame("orange", appleCalculator.getApple(), "we love apple");
Supplier<String> messageSupplier = () -> "we love apple";
assertNotSame("orange", appleCalculator.getApple(), messageSupplier);
}
}
plugins {
id 'java'
}
group 'org.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
testImplementation('org.junit.jupiter:junit-jupiter:5.6.2')
}
Assert Array Equals
assertArrayEquals indicate that if the actual array return from the method is the same as an excepted array then the test will be considered as pass.
package com.example.junit5.sujan;
public class AppleCalculator {
public int[] addAppleArray() {
return new int[]{2 / 2, 4 / 2, 6 / 2};
}
}
package com.example.junit5.sujan;
import org.junit.jupiter.api.Test;
import java.util.function.Supplier;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
class AppleCalculatorTest {
@Test
void assertArrayEqualsTest() {
AppleCalculator appleCalculator = new AppleCalculator();
assertArrayEquals(new int[]{1, 2, 3}, appleCalculator.addAppleArray());
assertArrayEquals(new int[]{1, 2, 3}, appleCalculator.addAppleArray(), "we love apple");
Supplier<String> messageSupplier = () -> "we love apple";
assertArrayEquals(new int[]{1, 2, 3}, appleCalculator.addAppleArray(), messageSupplier);
}
}
plugins {
id 'java'
}
group 'org.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
testImplementation('org.junit.jupiter:junit-jupiter:5.6.2')
}
Assert Iterable Equals
assertIterableEquals compares the actual iterable object ie Array or collection, must be deep equal to the expected iterable result. Expected and actual iterable objects must have same count of the object and must be equal as per position as well.
package com.example.junit5.sujan;
import java.util.ArrayList;
import java.util.List;
public class AppleCalculator {
public List<String> getApple() {
List<String> appleList = new ArrayList<>();
appleList.add("Macintosh");
appleList.add("Fuji");
appleList.add("Gala");
appleList.add("Jonagold");
appleList.add("GrannySmith");
appleList.add("PinkLady");
return appleList;
}
}
package com.example.junit5.sujan;
import org.junit.jupiter.api.Test;
import java.util.Arrays;
import java.util.List;
import java.util.function.Supplier;
import static org.junit.jupiter.api.Assertions.assertIterableEquals;
class AppleCalculatorTest {
@Test
void assertIterableEqualsTest() {
List<String> appleList = Arrays.asList("Macintosh", "Fuji", "Gala", "Jonagold", "GrannySmith", "PinkLady");
AppleCalculator appleCalculator = new AppleCalculator();
assertIterableEquals(appleList, appleCalculator.getApple());
assertIterableEquals(appleList, appleCalculator.getApple(), "we love apple");
Supplier<String> messageSupplier = () -> "we love apple";
assertIterableEquals(appleList, appleCalculator.getApple(), messageSupplier);
}
}
plugins {
id 'java'
}
group 'org.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
testImplementation('org.junit.jupiter:junit-jupiter:5.6.2')
}
Assert fail
we need to fail test case no matter what, for this, we can use assertFail. it will fail the test case irrespective of the result.
package com.example.junit5.sujan;
public class AppleCalculator {
public String getApple() {
return "apple";
}
}
package com.example.junit5.sujan;
import org.junit.jupiter.api.Test;
import java.util.function.Supplier;
import static org.junit.jupiter.api.Assertions.fail;
class AppleCalculatorTest {
@Test
void failTest() {
AppleCalculator appleCalculator = new AppleCalculator();
fail();
fail(appleCalculator.getApple());
fail("we love apple");
Supplier<String> messageSupplier = () -> "we love apple";
fail(messageSupplier);
}
}
plugins {
id 'java'
}
group 'org.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
testImplementation('org.junit.jupiter:junit-jupiter:5.6.2')
}
Assert All
assertAll is a lambda functoin which takes Executable as a parameter, it can assert multiple results, if all asserts passed then only test will be considered as passed.
package com.example.junit5.sujan;
public class Apple {
private int appleId;
private String appleName;
public Apple(int appleId, String appleName) {
this.appleId = appleId;
this.appleName = appleName;
}
public int getAppleId() {
return appleId;
}
public String getAppleName() {
return appleName;
}
}
package com.example.junit5.sujan;
public class AppleCalculator {
public Apple getApple() {
Apple apple = new Apple(1, "apple");
return apple;
}
}
package com.example.junit5.sujan;
import org.junit.jupiter.api.Test;
import java.util.function.Supplier;
import static org.junit.jupiter.api.Assertions.assertAll;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
class AppleCalculatorTest {
@Test
void assertAllTest() {
AppleCalculator appleCalculator = new AppleCalculator();
Apple apple = appleCalculator.getApple();
assertAll(() -> assertNotNull(apple),
() -> assertNotNull(apple, "apple is not null"),
() -> assertEquals(1, apple.getAppleId()),
() -> assertEquals(1, apple.getAppleId(), "apple id is 1"),
() -> assertEquals("apple", apple.getAppleName()),
() -> assertEquals("apple", apple.getAppleName(), "apple name is apple")
);
Supplier<String> messageSupplier = () -> "apple is not null";
assertNotNull(apple, messageSupplier);
}
}
plugins {
id 'java'
}
group 'org.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
testImplementation('org.junit.jupiter:junit-jupiter:5.6.2')
}