- Junit Assert & AssertEquals with Example
- JUnit Assert methods
- Boolean
- Null object
- Identical
- Assert Equals
- Assert Array Equals
- Fail Message
- JUnit assertEquals
- Floating point assertions
- JUnit Assert Example
- Summary:
- JUnit Assertions
- 6.2 Методы assertEquals, assertTrue, assertFalse
- 6.3 Метод assertAll
- 6.4 Метод assertTimeout
- 6.5 Метод assertThrows
Junit Assert & AssertEquals with Example
Assert is a method useful in determining Pass or Fail status of a test case, The assert methods are provided by the class org.junit.Assert which extends java.lang.Object class.
There are various types of assertions like Boolean, Null, Identical etc.
Junit provides a class named Assert, which provides a bunch of assertion methods useful in writing test cases and to detect test failure
The assert methods are provided by the class org.junit.Assert which extends java.lang.Object class.
In this tutorial, you will learn-
JUnit Assert methods
Boolean
If you want to test the boolean conditions (true or false), you can use following assert methods
Here the condition is a boolean value.
Null object
If you want to check the initial value of an object/variable, you have the following methods:
Here object is Java object e.g. assertNull(actual);
Identical
If you want to check whether the objects are identical (i.e. comparing two references to the same java object), or different.
- assertSame(expected, actual), It will return true if expected == actual
- assertNotSame(expected, actual)
Assert Equals
If you want to test equality of two objects, you have the following methods
It will return true if: expected.equals( actual ) returns true.
Assert Array Equals
If you want to test equality of arrays, you have the following methods as given below:
Above method must be used if arrays have the same length, for each valid value for i, you can check it as given below:
- assertEquals(expected[i],actual[i])
- assertArrayEquals(expected[i],actual[i])
Fail Message
If you want to throw any assertion error, you have fail() that always results in a fail verdict.
You can have assertion method with an additional String parameter as the first parameter. This string will be appended in the failure message if the assertion fails. E.g. fail( message ) can be written as
JUnit assertEquals
You have assertEquals(a,b) which relies on the equals() method of the Object class.
- Here it will be evaluated as a.equals( b ).
- Here the class under test is used to determine a suitable equality relation.
- If a class does not override the equals() method of Object class, it will get the default behaviour of equals() method, i.e. object identity.
If a and b are primitives such as byte, int, boolean, etc. then the following will be done for assertEquals(a,b) :
a and b will be converted to their equivalent wrapper object type (Byte,Integer, Boolean, etc.), and then a.equals( b ) will be evaluated.
For Example: Consider below-mentioned strings having same values, let’s test it using assertTrue
String obj1="Junit"; String obj2="Junit"; assertEquals(obj1,obj2);
Above assert statement will return true as obj1.equals(obj2) returns true.
Floating point assertions
When you want to compare floating point types (e.g. double or float), you need an additional required parameter delta to avoid problems with round-off errors while doing floating point comparisons.
The assertion evaluates as given below:
assertEquals( aDoubleValue, anotherDoubleValue, 0.001 )
JUnit Assert Example
Below example demonstrates how to assert a condition using JUnit assert methods.
Let’s create a simple test class named Junit4AssertionTest.java and a test runner class TestRunner.java.
You will create few variables and important assert statements in JUnit.
In this example, you will execute our test class using TestRunner.java
Step 1) Lets create a class covering all important assert statement methods in junit:
Junit4AssertionTest.java
package guru99.junit; import static org.junit.Assert.*; import org.junit.Test; public class Junit4AssertionTest < @Test public void testAssert()< //Variable declaration String string1="Junit"; String string2="Junit"; String string3="test"; String string4="test"; String string5=null; int variable1=1; int variable2=2; int[] airethematicArrary1 = < 1, 2, 3 >; int[] airethematicArrary2 = < 1, 2, 3 >; //Assert statements assertEquals(string1,string2); assertSame(string3, string4); assertNotSame(string1, string3); assertNotNull(string1); assertNull(string5); assertTrue(variable1>
Step 2) You need to create a test runner class to execute above class:
TestRunner.java
“assertSame()” functionality is to check that the two objects refer to the same object.
Since string3=”test” and string4=”test” means both string3 and string4 are of the same type so assertSame(string3, string4) will return true.
“assertNotSame()” functionality is to check that the two objects do not refer to the same object.
Since string1=”Junit” and string3=”test” means both string1 and string3 are of different types, so assertNotSame(string1, string3) will return true.
“assertNotNull()” functionality is to check that an object is not null.
Since string1= “Junit” which is a non-null value so assertNotNull(string1) will return true.
“assertNull()” functionality is to check that an object is null.
Since string5= null which is a null value so assertNull(string5) will return true.
“assertTrue()” functionality is to check that a condition is true.
“assertArrayEquals()” functionality is to check that the expected array and the resulted array are equal. The type of Array might be int, long, short, char, byte or java.lang.Object.
Since airethematicArrary1 = < 1, 2, 3 >and airethematicArrary2 = < 1, 2, 3 >which shows both the arrays are equal so assertArrayEquals(airethematicArrary1, airethematicArrary2) will return true
Since all seven assert statements of Junit4AssertionTest.java class returns true, therefore when you execute the test assert class, it will return a successful test. (see the output below)
Step 4) Right click on Junit4AssertionTest.java and click on runAs->JUnit. You will see the output as given below:
Above output shows a successful test result as expected.
Summary:
In this tutorial, you learned all important types of assertion methods provided by JUnit. Also, you have seen the examples of assert statements. Which shows that if all assert statements return true, then the test GUI will return a true result and if the single test fails it will return a failed result.
JUnit Assertions
Ассерты (asserts) — это специальные проверки , которые можно вставить в разные места кода. Их задача определять, что что-то пошло не так. Вернее, проверять, что все идет как нужно. Вот это “как нужно” они и позволяют задать различными способами.
С некоторыми ассертами ты уже сталкивался в коде выше. Первый из них – проверка объектов на равенство. Если объекты не равны — кинется исключение и тест будет провален.
Тут важен порядок сравнения , ведь JUnit в итоговом отчете напишет что-то типа “получено значение 1, а ожидалось 3”. Общий формат такой проверки имеет вид:
assertEquals(эталон, значение)
@Test public void whenAssertingEquality ()
6.2 Методы assertEquals, assertTrue, assertFalse
Ниже я приведу список самых популярных методов — ассертов. По их названиям вполне можно догадаться как они работают. Но все же напишу краткое пояснение:
assertEquals | Проверяет, что два объекта равны |
---|---|
assertArrayEquals | Проверяет, что два массива содержат равные значения |
assertNotNull | Проверяет, что аргумент не равен null |
assertNull | Проверяет, что аргумент равен null |
assertNotSame | Проверят, что два аргумента — это не один и тот же объект |
assertSame | Проверят, что два аргумента — это один и тот же объект |
assertTrue | Проверяет, что аргумент равен true |
assertFalse | Проверяет, что аргумент равен false |
Некоторые из этих методов кажутся излишними. Зачем использовать assertSame(a, b) , если можно просто написать assertTrue(a == b) ?
Все дело в том, что assert — это очень умный метод. Он делает много чего полезного и, в том числе, пишет в лог информацию об ошибке . В первом случае он напишет, что ожидался объект А, а получен объект Б. Во втором случае просто напишет, что ожидалось true .
Когда у тебя сотни тестов, особенно выполняемые на специальном тестовом сервере, то наличие детальных логов может быть суперполезным. Думаю,ты понимаешь, о чем я.
Пример сравнения массивов:
@Test public void whenAssertingArraysEquality() < char[] expected = ; char[] actual = "Junit".toCharArray(); assertArrayEquals(expected, actual); >
6.3 Метод assertAll
Как уже говорилось выше, метод assert не просто выполняет проверку, но и пишет в лог много информации о сравнимых объектах.
Допустим выполняется сравнение:
Address address = unitUnderTest.methodUnderTest(); assertEquals("Вашингтон", address.getCity()); assertEquals("Oracle Parkway", address.getStreet()); assertEquals("500", address.getNumber());
Но если один из параметров не совпадет, то проверки остальных не произойдет. А хотелось бы чтобы они все-таки произошли и их результаты записались в лог. Но при этом, если хотя бы одна проверка не прошла, то тест все-таки был провален.
Для этого есть специальный метод — assertAll() . В качестве первого аргумента он принимает комментарий, который нужно записать в лог, а дальше — любое количество функций-ассертов.
Вот как будет переписан наш пример с его помощью:
Address address = unitUnderTest.methodUnderTest(); assertAll("Сложный сценарий сравнение адреса", () -> assertEquals("Вашингтон", address.getCity()), () -> assertEquals("Oracle Parkway", address.getStreet()), () -> assertEquals("500", address.getNumber()) );
Тогда если адрес будет неправильный, в лог будет написано что-то типа:
Сложный сценарий сравнение адреса (3 failures) expected: but was: expected: but was: expected: but was:
6.4 Метод assertTimeout
Помнишь аннотацию @Timeout ? Она позволяла контролировать время выполнения всего метода. Но иногда бывает полезно задать ограничения на выполнения некоторой части кода внутри метода. Для этого можно использовать assertTimeout() .
В качестве первого параметра в него передается время, а в качестве второго — код (функция), который должен выполниться за указанное время. Пример:
@Test public void whenAssertingTimeout() < assertTimeout( ofSeconds(2), () -> < // пауза в одну секунду Thread.sleep(1000); >); >
У класса Assert есть 12 вариантов метода assertTimeout() . Если хочешь ознакомиться с ними подробнее, добро пожаловать в официальную документацию.
6.5 Метод assertThrows
Очень часто бывают ситуации, когда тебе нужно убедиться, что в определенной ситуации код кидает нужное исключение: определил ошибку и кинул нужное исключение. Это очень распространенная ситуация.
На этот случай есть еще один полезный метод assert — это assertThrows() . Общий формат его вызова имеет вид:
assertThrows(исключение, код)
По сути, он очень похож на метод assertTimeout() , только он проверяет, чтобы указанный код выкинул нужное исключение. Пример:
@Test void whenAssertingException() < Throwable exception = assertThrows( IllegalArgumentException.class, () -> < throw new IllegalArgumentException("Exception message"); >); assertEquals("Exception message", exception.getMessage()); >