How to write JUnit test cases

Related Products On This Page Java Unit Testing Frameworks and JUnitMay 25, 2026 · 12 min read · Testing Guide

Related Products

How to publish JUnit test cases

JUnit is one of the most popular testing frameworks for Java covering. It enables developers to write and run quotable tests to ensure each portion of a program mapping aright. Writing JUnit test cases helps catch bugs early, support refactoring with confidence, and promotes the development of reliable and maintainable code.

JUnit has evolved over clip. JUnit 4 introduced key characteristic like annotations (@ Test, @ Before, @ After) and averment (assertEquals, assertThrows). JUnit 5 builds on this foundation with new annotations like @ BeforeEach and @ AfterEach and improved features like more flexible test lifecycle management and better integration with mod development puppet.

Read this guide to discover how to write JUnit tryout causa, their importance, implementation steps, and best practices.

Java Unit Testing Frameworks and JUnit

in Java provide an efficient tool for writing, organizing, and fulfil examination cases. This is important for conserve codification quality and detecting issues early in the. Some popular frameworks include JUnit,,, AssertJ, and Hamcrest.

Read More:

JUnit utilise an annotation-based syntax that makes writing and managing trial easy. With annotations like @ Test for label test methods, and @ BeforeEach or @ AfterEach for setting up and clean tryout surroundings, JUnit provides a clean structure for test performance.

Read More:

The release of JUnit 5 work improvements like better modularity, support for modernistic Java features like lambdas, and a more powerful propagation framework.

Why use JUnit for unit examine Java applications?

JUnit is a widely use testing framework for Java that simplifies unit essay and ensures code reliableness. Here ’ s why JUnit is indispensable for Java coating:

  • Automated & amp; Repeatable Tests: JUnit allows developer to automate test performance, assure reproducible results and early bug spotting.
  • Simple & amp; Intuitive API: With easy-to-use annotations like@Test, compose and managing test suit becomes straightforward.
  • Seamless Integration: It act well with IDEs like Eclipse and IntelliJ and establish puppet like Maven and Gradle, making it CI/CD-friendly.
  • Supports TDD:Encourages Test-Driven Development, leading to modular, maintainable, and well-structured code.
  • Powerful & amp; Annotations: Provides rich asseveration and lifecycle methods for efficient test execution.

JUnit ’ s structured coming makes it a preferred choice for unit testing, ensuring Java covering are stable, maintainable, and bug-free.

Must Read:

What are JUnit Test Cases?

JUnit are pen using the framework to verify the functionality of individual part in a Java application.

These tests assist ensure that methods and classes produce expected results, improving code reliability. JUnit cater annotations like @ Test, @ Before, and @ After to structure test case efficiently.

Read More:

Importance of JUnit Test Cases

Below are the key ground why JUnit test cases are important:

  • Ensures Code Reliability: Detects bug early by validate code doings.
  • Supports : Helps developers publish examination causa before implementing code.
  • Automates Testing: Reduces manual effort by running tests automatically.
  • Enhances Code Maintainability: Encourages modular and error-free code by enforcing good practices.
  • Facilitates: Works seamlessly with pipelines for smooth deployments.

Test Management Reimagined with AI

Join our live webinar to discover how top QA teams boost test creation speed by 90 % using AI.

How to write JUnit Test Cases

JUnit tests are written in the same manner as Java projects; however, while writing tests, you must be cognisant of some. JUnit annotations are block of predefined text that the Java API ply for better structure and readability.

Here is an example of a few frequently used JUnit annotations that get in handy in this tutorial on Java JUnit examination.

  1. @Test& # 8211; to place the genuine trial case
  2. @Before& # 8211; to execute some argument before each test case
  3. @After& # 8211; to action some statement after each test case
  4. @Ignores& # 8211; to ignore some statement during the execution of the examination
  5. @ BeforeAll& # 8211; to fulfil some argument before all the exam cases
  6. @AfterAll& # 8211; to execute some argument after all the test cases

Also Read:

Step-by-Step Guide: Writing a JUnit Test Case with Example

Now, deal a practical exemplar to understand Java Junit testing. This instance will conduct a uncomplicated exam using JUnit where:

  • First, assign some value to a twine, and
  • Then, with the help of the assert keyword, ensure if the value assigned matches our intended value.

Prerequisite for Junit Test Cases

Here are the prerequisites required for running JUnit test cases:

  1. You must have Java JDK installed on your system. To control if Java is instal on your system, run the commandjava –versionin the Command prompt. If it is installed, it will exhibit the Java version.
  2. Any IDE of your choice. In this instance, using Eclipse 2022.

Read More:

Steps to Write Junit Test Cases

Some of the important steps to be postdate for executing JUnit 5 tryout causa are:

Step 1: Create a Maven project

To create a Maven project, open Eclipse and then discharge the following steps:

1. Click theFile option

2. Hover overNew

3. Click the Project option

4. Select theMaven project

5. Enter theGroup ID and Artifact IDof your selection and proceed.

6. Your Maven project is created.

Step 2: Add Maven dependencies

In this step, youneed to add some colony that will help you achieve JUnit essay. To do so, add aJUnit dependencyfrom the Maven marketplace by inserting it into the pom.xml file that you got on our Maven project.

Add this script inside the dependencies tag in the pom.xml file.

Pro tip: Tools like SUSA can handle this autonomously — upload your app and get results without writing a single test script.

& lt; dependence & gt; & lt; groupId & gt; org.junit.jupiter & lt; /groupId & gt; & lt; artifactId & gt; junit-jupiter & lt; /artifactId & gt; & lt; adaptation & gt; 5.10.0 & lt; /version & gt; & lt;! -- or the latest variation -- & gt; & lt; scope & gt; tryout & lt; /scope & gt; & lt; /dependency & gt;

Step 3: Create a new class file

Now, follow the undermentioned stairs to create a new class file where you will write our Junit test.

1. Right-click the foldersrc/test/java

2. Hover overNew

3. Click Classand create a file by enter a name of your choice

Step 4: Writing the Test Script
Now the final piece is to write the JUnit tryout after specify up the project. Open the antecedently created examination class file inside thesrc/test/java folder.

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;

public class BrowserStackJunit {
String message = & # 8220; BrowserStack is the intended message & # 8221;;

@Test
public nullity testMessage () {
System.out.println (& # 8220; Inside testMessage () & # 8221;);
assertEquals (& # 8220; BrowserStack is the intended message & # 8221;, message);
}

Step 5: Executing JUnit test

Once the test is compose, right-click and select Run as > JUnit test.

  • If the test is successful, the unexpended panel will be highlighted green.
  • If it fails, it will be indicate in red, and the mistake log will be displayed on the console.

How To Filter JUnit Tests Using Tags?

JUnit 5 countenance you to organize into categories and run specific groups of tests together using the tags feature. A mutual use cause is to mark examination as unit,, or and execute them at different stages in the CI pipeline.

1. Adding Tags to Tests

In JUnit 5, you can use the @ Tag annotation to assign categories to tests. This helps direct tests and allows for running specific radical based on tags.

import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; public class UserServiceTest {@ Test @ Tag (`` tight '') void quickTest () {} @ Test @ Tag (`` slack '') void longRunningTest () {}}

2. Filtering by Tags using Maven

By configuring the maven-surefire-plugin in your pom.xml, you can include or exclude specific test based on their tags. This make it easier to run solely relevant trial during your build or CI summons.

& lt; build & gt; & lt; plugins & gt; & lt; plugin & gt; & lt; groupId & gt; org.apache.maven.plugins & lt; /groupId & gt; & lt; artifactId & gt; maven-surefire-plugin & lt; /artifactId & gt; & lt; version & gt; 3.0.0 & lt; /version & gt; & lt; configuration & gt; & lt; groups & gt; fast & lt; /groups & gt; & lt;! -- Only run tests tagged with `` fast '' -- & gt; & lt;! -- & lt; excludedGroups & gt; decelerate & lt; /excludedGroups & gt; -- & gt; & lt;! -- Exclude `` slow '' tests -- & gt; & lt; /configuration & gt; & lt; /plugin & gt; & lt; /plugins & gt; & lt; /build & gt;

Read More:

3. Running Tests with Tags via Command Line

You can filtrate tests by shred directly from the command line using to grant selective trial execution:

mvn test -Dgroups=fast

To exclude a tag:

mvn tryout -DexcludedGroups=slow

Best Practices for writing JUnit Test Cases

Some of the better praxis for writing JUnit test cases are:

1. Test on Existent Devices

While unit tests are utilitarian for initial logic verification, they can & # 8217; t replicate issues that rise on real devices. Real-device testing identifies job like UI inconsistencies and performance issues and ensures compatibility across different platforms.

provides access to 3,500+ real devices and browsers to run exam under real user weather. You can run unit tests with Java and Selenium. By with your, you can activate JUnit test lawsuit mechanically during the build process to insure consistent test performance across existent devices.

Test Management Reimagined with AI

Join our live webinar to notice how top QA teams boost test conception speed by 90 % apply AI.

2. Keep Your Unit Tests As Small As Possible

Small and focused unit tests are easier to say, maintain, and debug when they fail. Here & # 8217; s how you can compose a small unit test that control a specific behavior of the User class:

@ Test nihility shouldReturnFullName () {User user = new User (`` Ayush '', `` Singh ''); assertEquals (`` Ayush Singh '', user.getFullName ());}

In this example, the test is focused only on verifying the getFullName method, making it easier to identify issues quickly.

3. Add Open Messages to Assertions

Proper and detailed messages should be added to averment to understand what went improper when a test fails and make debugging quicker. Here ’ s how to add a clear message to your assertions:

assertEquals (`` Names should match '', `` Ayush Singh '', user.getFullName ());

In this model, if the test fails, you will immediately cognize the issue is a mismatch between the expected and genuine names.

4. Use the Correct Assert Method and Argument Order

JUnit statement follow the format assertEquals (expected, actual), which help prevent discombobulation and improve legibility.

Here ’ s an illustration of the correct and wrong usages of assertEquals:

// Correct assertEquals (`` Expected output did not match '', 10, calculator.add (5, 5)); // Avoid this (wrong order) assertEquals (calculator.add (5, 5), 10);

5. Reduce Code Duplication

To avoid double setup code in every test method, use the @ BeforeEach note to initialize mutual test data or objects. This makes your tests more maintainable and readable.

For example, if you ’ re essay method that require a user aim, set it up formerly using @ BeforeEach:

private User user; @ BeforeEach void setUp () {user = new User (`` Ayush '', `` Singh '');} @ Test void shouldReturnFirstName () {assertEquals (`` Ayush '', user.getFirstName ());}

This frame-up guarantee that the user object is usable for all tests without the need to hearten it in each single tryout method.

6. Use Annotations Wisely

JUnit ply powerful note (@ Test, @ BeforeEach, @ AfterEach, @ BeforeAll, @ AfterAll) to negociate. Use them to organize and optimize test execution.

For example, use @ BeforeAll to initialize resources that are need before any test runs:

@ BeforeAll static emptiness initDatabase () {} Similarly, @ AfterEach can be used to tear down resources after each test method: @ AfterEach void tearDown () {}

Advanced Techniques for Unit Testing with JUnit

The modern features of JUnit assistant write more flexible, powerful, and detailed test codification. These techniques grant covering edge cases, improving test readability, and handling conditions more effectively.

1. Checking for Exceptions

JUnit provides an easygoing way to verify that your code stroke expected exceptions expend assertThrows.

@ Test void shouldThrowExceptionWhenDividingByZero () {assertThrows (ArithmeticException.class, () - & gt; {int outcome = 10 / 0;});}

2. Parameterized Testing

This allows you to run the same test multiple times with different inputs.

@ ParameterizedTest @ ValueSource (strings = {`` racecar '', `` level '', `` madam ''}) void shouldRecognizePalindromes (String word) {assertTrue (StringUtils.isPalindrome (word));}

3. Using Assumptions

Assumptions are utilitarian for environment-specific or conditional logic, as they skip tests when certain conditions aren ’ t met.

@ Test void shouldRunOnlyOnDevEnvironment () {assumeTrue (`` dev '' .equals (System.getProperty (`` env '')));}

4. Disabling Tests

This is expend to disable a test temporarily. It ’ s helpful when a test is cognize to be broken or under revision.

@ Test @ Disabled (`` Fixing a bug related to appointment format '') void shouldFormatDateCorrectly () {}

5. Nested Test Classes

JUnit 5 allows for the creation of Nested classes for group-related tests and makes more readable and logically structured. Here ’ s how to use it.

class BankAccountTest {@ Nested class WhenNewAccount {individual BankAccount history; @ BeforeEach void setUp () {account = new BankAccount ();} @ Test void balanceShouldBeZero () {assertEquals (0, account.getBalance ());}}}

Read More:

6. Timeout

You can set a duration for the tryout to complete within a specific time frame using assertTimeout or @ Timeout.

@ Test @ Timeout (2) nullity shouldCompleteInTwoSeconds () drop InterruptedException {Thread.sleep (1500);}

Talk to an Expert

Useful Resources for JUnit

Conclusion

JUnit 5 is an open-source unit-testing framework in the domain of Java development. JUnit is generally used to write automated tests. The objective of unit tests is to be done in conjunction with the development of the software, so you can run them early in the development process in order to reduce errors at the same time.

Use BrowserStack to test JUnit 4 and JUnit 5 examination cases on real devices and browser. It supports parallel essay and can be incorporate with your CI/CD tools to trip trial with every body-build. You can also scale your testing by running multiple tests simultaneously to reduce overall exam time.

Tags

On This Page

55,000+ Views

# Ask-and-Contributeabout this topic with our Discord community.

Related Guides

Automate This With SUSA

Upload your APK or URL. SUSA explores like 10 real users — finds bugs, accessibility violations, and security issues. No scripts needed.

Try SUSA Free

Test Your App Autonomously

Upload your APK or URL. SUSA explores like 10 real users — finds bugs, accessibility violations, and security issues. No scripts.

Try SUSA Free