JUnit - 3 ways to assert an object is of a specific type (instance of)
- Details
- Written by Nam Ha Minh
- Last Updated on 08 July 2024   |   Print Email
When writing code for unit tests using JUnit, you may need to check if an object is of a specific class type. In other words, your tests need to assert that an object is instance of a specific class. In this post, I’d like to share with you 3 ways for such purpose in Java and JUnit.
1. Using Java’s assert statement with instanceof operator
This is the simplest way to verify whether an object is of a specified type or not, using pure Java programming language (assert and instanceof keywords), as shown below:
@Test public void test() { Object obj = classUnderTest.foo(); assert (obj instanceof Student); }
Very simple, right? In this example, the test will pass if the object obj is of type Student class.
2. Using JUnit’s assertTrue() method
The second way to test if an object is an instance of a specific class is using the assertTrue() method provided by the Assertions class in JUnit. The following example shows you how:
@Test public void test() { Object obj = classUnderTest.foo(); Assertions.assertTrue(obj instanceof Student); }
If you use static import for the assertTrue() method, the code can be shorter like this:
@Test public void test() { Object obj = classUnderTest.foo(); assertTrue(obj instanceof Student); }
In case you want to do the reverse, i.e. assert that an object is not of a specific type, use the assertFalse() method. For example:
@Test public void test() { Object obj = classUnderTest.foo(); Assertions.assertFalse(obj instanceof Student); }
This test will pass if the given object obj is not an instance of Student class.
3. Using JUnit’s assertInstanceOf() Method
Since JUnit 5.10 or later, you can use the assertInstanceOf() method provided in the Assertions class, for more readability. The following example shows you how:
@Test public void test() { Object obj = classUnderTest.foo(); Assertions.assertInstanceOf(Student.class, obj); }
As you can see, this method requires 2 parameters: the first one is the expected class type, and the second one is the actual object. If you have static import for the assertInstanceOf() method, the code could be shorter like this:
@Test public void test() { Object obj = classUnderTest.foo(); assertInstanceOf(Student.class, obj); }
Conclusion:
So far you have learned 3 different ways which can be used to assert that an object is of a specific type in Java and JUnit. Which one to use depends on your taste: using assert and instanceof seems to be the easiest way, however using the assertInstanceOf() method seems to be more readable.
References:
Other JUnit Tutorials:
- JUnit Tutorial for beginner with Eclipse
- How to compile and run JUnit tests in command line
- JUnit Test Suite Example - How to create and run test suite in command line and Eclipse
- JUnit Test Exception Examples - How to assert an exception is thrown
Comments