Course – Black Friday 2025 – NPI EA (cat= Baeldung)
announcement - icon

Yes, we're now running our Black Friday Sale. All Access and Pro are 33% off until 2nd December, 2025:

>> EXPLORE ACCESS NOW

Partner – Orkes – NPI EA (cat=Spring)
announcement - icon

Modern software architecture is often broken. Slow delivery leads to missed opportunities, innovation is stalled due to architectural complexities, and engineering resources are exceedingly expensive.

Orkes is the leading workflow orchestration platform built to enable teams to transform the way they develop, connect, and deploy applications, microservices, AI agents, and more.

With Orkes Conductor managed through Orkes Cloud, developers can focus on building mission critical applications without worrying about infrastructure maintenance to meet goals and, simply put, taking new products live faster and reducing total cost of ownership.

Try a 14-Day Free Trial of Orkes Conductor today.

Partner – Orkes – NPI EA (tag=Microservices)
announcement - icon

Modern software architecture is often broken. Slow delivery leads to missed opportunities, innovation is stalled due to architectural complexities, and engineering resources are exceedingly expensive.

Orkes is the leading workflow orchestration platform built to enable teams to transform the way they develop, connect, and deploy applications, microservices, AI agents, and more.

With Orkes Conductor managed through Orkes Cloud, developers can focus on building mission critical applications without worrying about infrastructure maintenance to meet goals and, simply put, taking new products live faster and reducing total cost of ownership.

Try a 14-Day Free Trial of Orkes Conductor today.

eBook – Guide Spring Cloud – NPI EA (cat=Spring Cloud)
announcement - icon

Let's get started with a Microservice Architecture with Spring Cloud:

>> Join Pro and download the eBook

eBook – Mockito – NPI EA (tag = Mockito)
announcement - icon

Mocking is an essential part of unit testing, and the Mockito library makes it easy to write clean and intuitive unit tests for your Java code.

Get started with mocking and improve your application tests using our Mockito guide:

Download the eBook

eBook – Reactive – NPI EA (cat=Reactive)
announcement - icon

Spring 5 added support for reactive programming with the Spring WebFlux module, which has been improved upon ever since. Get started with the Reactor project basics and reactive programming in Spring Boot:

>> Join Pro and download the eBook

eBook – Java Streams – NPI EA (cat=Java Streams)
announcement - icon

Since its introduction in Java 8, the Stream API has become a staple of Java development. The basic operations like iterating, filtering, mapping sequences of elements are deceptively simple to use.

But these can also be overused and fall into some common pitfalls.

To get a better understanding on how Streams work and how to combine them with other language features, check out our guide to Java Streams:

>> Join Pro and download the eBook

eBook – Jackson – NPI EA (cat=Jackson)
announcement - icon

Do JSON right with Jackson

Download the E-book

eBook – HTTP Client – NPI EA (cat=Http Client-Side)
announcement - icon

Get the most out of the Apache HTTP Client

Download the E-book

eBook – Maven – NPI EA (cat = Maven)
announcement - icon

Get Started with Apache Maven:

Download the E-book

eBook – Persistence – NPI EA (cat=Persistence)
announcement - icon

Working on getting your persistence layer right with Spring?

Explore the eBook

eBook – RwS – NPI EA (cat=Spring MVC)
announcement - icon

Building a REST API with Spring?

Download the E-book

Course – LS – NPI EA (cat=Jackson)
announcement - icon

Get started with Spring and Spring Boot, through the Learn Spring course:

>> LEARN SPRING
Course – RWSB – NPI EA (cat=REST)
announcement - icon

Explore Spring Boot 3 and Spring 6 in-depth through building a full REST API with the framework:

>> The New “REST With Spring Boot”

Course – LSS – NPI EA (cat=Spring Security)
announcement - icon

Yes, Spring Security can be complex, from the more advanced functionality within the Core to the deep OAuth support in the framework.

I built the security material as two full courses - Core and OAuth, to get practical with these more complex scenarios. We explore when and how to use each feature and code through it on the backing project.

You can explore the course here:

>> Learn Spring Security

Partner – Orkes – NPI EA (cat=Java)
announcement - icon

Modern software architecture is often broken. Slow delivery leads to missed opportunities, innovation is stalled due to architectural complexities, and engineering resources are exceedingly expensive.

Orkes is the leading workflow orchestration platform built to enable teams to transform the way they develop, connect, and deploy applications, microservices, AI agents, and more.

With Orkes Conductor managed through Orkes Cloud, developers can focus on building mission critical applications without worrying about infrastructure maintenance to meet goals and, simply put, taking new products live faster and reducing total cost of ownership.

Try a 14-Day Free Trial of Orkes Conductor today.

Course – LSD – NPI EA (tag=Spring Data JPA)
announcement - icon

Spring Data JPA is a great way to handle the complexity of JPA with the powerful simplicity of Spring Boot.

Get started with Spring Data JPA through the guided reference course:

>> CHECK OUT THE COURSE

Partner – Moderne – NPI EA (cat=Spring Boot)
announcement - icon

Refactor Java code safely — and automatically — with OpenRewrite.

Refactoring big codebases by hand is slow, risky, and easy to put off. That’s where OpenRewrite comes in. The open-source framework for large-scale, automated code transformations helps teams modernize safely and consistently.

Each month, the creators and maintainers of OpenRewrite at Moderne run live, hands-on training sessions — one for newcomers and one for experienced users. You’ll see how recipes work, how to apply them across projects, and how to modernize code with confidence.

Join the next session, bring your questions, and learn how to automate the kind of work that usually eats your sprint time.

Course – Black Friday 2025 – NPI (cat=Baeldung)
announcement - icon

Yes, we're now running our Black Friday Sale. All Access and Pro are 33% off until 2nd December, 2025:

>> EXPLORE ACCESS NOW

1. Introduction

Software testing is a crucial stage in the software development lifecycle. It helps us evaluate, identify, and improve our software’s quality.

Testing frameworks help us with predefined tools that facilitate this process. In this article, we’re going to talk about JUnit, Mockito, how they help us, and the differences between the two frameworks.

2. What Is JUnit?

JUnit is one of the most widely used unit-testing frameworks and JUnit 5 is its latest generation. This version focuses on Java 8 and above, and enables various styles of testing.

JUnit 5 runs test cases using assertions, annotations, and test runners. The framework is primarily targeted for unit testing. It focuses mainly on methods and classes, isolated from other elements of the project.

Different from previous versions, JUnit 5 is composed of three different sub-projects:

  • The JUnit Platform – crucial in launching testing frameworks on the JVM
  • JUnit Jupiter – introduces a new programming model (requirements to write tests) and extension model (Extension API) to write the new generation tests
  • JUnit Vintage – ensures compatibility with tests written using JUnit 3 and Junit 4

For runtime, JUnit 5 requires Java 8 (or higher). However, code that is already compiled using previous versions of the JDK can still be tested.

Here is how a generic JUnit test class and method looks like:

public class JunitVsMockitoUnitTest {
    @Test
    public void whenUsingJunit_thenObjectCanBeInstantiated() {
        InstantiableClassForJunit testableClass = new InstantiableClassForJunit();

        assertEquals("tested unit", testableClass.testableComponent());
    }
}

In the example above we’ve created a simple InstantiableClassForJunit class with a single method that returns a String. Furthermore, looking at the class in Github, we’ll see that for the assertEquals() method we imported the Assertions class. This is a clear example that we’re using JUnit 5 (Jupiter) and not an older version.

3. What Is Mockito?

Mockito is a Java-based framework developed by Szczepan Faber and friends. It proposes a different approach (than traditional mocking libraries using expect-run-verify). We ask questions about interactions after execution.

This approach also means Mockito mocks usually don’t need expensive setup beforehand. Furthermore, it has a slim API and mocking can be started quickly. There is a single kind of mock and only one way of creating mocks.

Some other important features of Mockito are:

  • ability to mock concrete classes and interfaces
  • little annotation syntax sugar – @Mock
  • clear error messages pointing to code line
  • ability to create custom argument matchers

Here’s how the previous code looks with Mockito added:

@ExtendWith(MockitoExtension.class)
public class JunitVsMockitoUnitTest {
    @Mock 
    NonInstantiableClassForMockito mock;

    // the previous Junit method

    @Test
    public void whenUsingMockito_thenObjectNeedsToBeMocked() {
        when(mock.nonTestableComponent()).thenReturn("mocked value");

        assertEquals("mocked value", mock.nonTestableComponent());
    }
}

Looking at the same class we notice that we’ve added an annotation (@ExtendWith) over the class name. There are other ways to enable Mockito but we won’t go into detail here.

Next, we’ve mocked an instance of the needed class using the @Mock annotation. Finally, in the test method, we’ve used the when().thenReturn() construct.

It’s good to remember to use this construct before the assert method. This lets Mockito know that when the specific method of the mocked class is called, it should return the mentioned value. In our case, this is “mocked value” instead of “some result”, what it would normally return.

4. Differences Between JUnit and Mockito

4.1. Test Case Structure

JUnit creates its structure using annotations. For example, we use @Test above a method to signal that is a test method. Or @ParametrizedTest to signal that the test method will run multiple times with different parameters. We use @BeforeEach, @AfterEach, @BeforeAll, and @AfterAll to signal that we want that method to be executed before or after one or all test methods.

On the other hand, Mockito helps us with these annotated methods. Mockito provides methods to create mock objects, configure their behavior (what they return), and verify certain interactions that took place (if the method was called, how many times, with what type of parameter, etc.).

4.2. Testing Scope

As we’ve mentioned before, we use JUnit for unit testing. This means we create the logic to test individual components (methods) in isolation. Next, we use JUnit to run the testing logic and confirm the test outcome.

On the other hand, Mockito is a framework that helps us generate objects (mocks) of certain classes and control their behavior during testing. Mockito is more about the interactions during testing rather than actually doing the testing itself. We can use Mockito to simulate external dependencies during testing.

For example, we’re supposed to receive an answer from an endpoint. Using Mockito we mock that endpoint and decide its behavior when we call it during the test. This way we don’t have to instantiate that object anymore. Furthermore, sometimes we can’t even instantiate that object without having to refactor it.

4.3. Test Doubles

The design of JUnit focuses on the concrete implementation of objects and test doubles. The latter means the implementation of fakes, and stubs (not mocks). Test doubles mimic real dependencies but have limited behavior specific to the objective we’re trying to accomplish.

On the other hand, Mockito works with dynamic objects (mocks created using reflection). When we use these mocks we personalize and control their behavior to suit our testing needs.

4.4. Test Coverage

JaCoCo is a test coverage framework that works with JUnit, not Mockito. This is another clear example of the differences between the two frameworks.

Mockito is a framework that is used within JUnit. JaCoCo (or other code coverage libraries) can only be used with a testing framework.

4.5. Object Mocking

With Mockito, we can specify expectations and behaviors for mock objects, speeding up the creation of desired testing scenarios.

JUnit focuses more on individual component testing using assertions. It does not have built-in mocking functionalities.

5. Conclusion

In this article, we’ve taken a look at two of the most popular testing frameworks in the Java ecosystem. We’ve learned that JUnit is the main testing facilitator. It helps us create the structure and appropriate environment.

Mockito is a framework that complements JUnit. It helps us test individual components by mocking elements that otherwise would be very complicated to instantiate or couldn’t be created at all. Furthermore, Mockito helps us control the output of these elements. Finally, we can also check if the desired behavior took place, and how many times.

The code backing this article is available on GitHub. Once you're logged in as a Baeldung Pro Member, start learning and coding on the project.
Course – Black Friday 2025 – NPI EA (cat= Baeldung)
announcement - icon

Yes, we're now running our Black Friday Sale. All Access and Pro are 33% off until 2nd December, 2025:

>> EXPLORE ACCESS NOW

Partner – Orkes – NPI EA (cat = Spring)
announcement - icon

Modern software architecture is often broken. Slow delivery leads to missed opportunities, innovation is stalled due to architectural complexities, and engineering resources are exceedingly expensive.

Orkes is the leading workflow orchestration platform built to enable teams to transform the way they develop, connect, and deploy applications, microservices, AI agents, and more.

With Orkes Conductor managed through Orkes Cloud, developers can focus on building mission critical applications without worrying about infrastructure maintenance to meet goals and, simply put, taking new products live faster and reducing total cost of ownership.

Try a 14-Day Free Trial of Orkes Conductor today.

Partner – Orkes – NPI EA (tag = Microservices)
announcement - icon

Modern software architecture is often broken. Slow delivery leads to missed opportunities, innovation is stalled due to architectural complexities, and engineering resources are exceedingly expensive.

Orkes is the leading workflow orchestration platform built to enable teams to transform the way they develop, connect, and deploy applications, microservices, AI agents, and more.

With Orkes Conductor managed through Orkes Cloud, developers can focus on building mission critical applications without worrying about infrastructure maintenance to meet goals and, simply put, taking new products live faster and reducing total cost of ownership.

Try a 14-Day Free Trial of Orkes Conductor today.

eBook – HTTP Client – NPI EA (cat=HTTP Client-Side)
announcement - icon

The Apache HTTP Client is a very robust library, suitable for both simple and advanced use cases when testing HTTP endpoints. Check out our guide covering basic request and response handling, as well as security, cookies, timeouts, and more:

>> Download the eBook

eBook – Java Concurrency – NPI EA (cat=Java Concurrency)
announcement - icon

Handling concurrency in an application can be a tricky process with many potential pitfalls. A solid grasp of the fundamentals will go a long way to help minimize these issues.

Get started with understanding multi-threaded applications with our Java Concurrency guide:

>> Download the eBook

eBook – Java Streams – NPI EA (cat=Java Streams)
announcement - icon

Since its introduction in Java 8, the Stream API has become a staple of Java development. The basic operations like iterating, filtering, mapping sequences of elements are deceptively simple to use.

But these can also be overused and fall into some common pitfalls.

To get a better understanding on how Streams work and how to combine them with other language features, check out our guide to Java Streams:

>> Join Pro and download the eBook

eBook – Persistence – NPI EA (cat=Persistence)
announcement - icon

Working on getting your persistence layer right with Spring?

Explore the eBook

Course – LS – NPI EA (cat=REST)

announcement - icon

Get started with Spring Boot and with core Spring, through the Learn Spring course:

>> CHECK OUT THE COURSE

Partner – Moderne – NPI EA (tag=Refactoring)
announcement - icon

Modern Java teams move fast — but codebases don’t always keep up. Frameworks change, dependencies drift, and tech debt builds until it starts to drag on delivery. OpenRewrite was built to fix that: an open-source refactoring engine that automates repetitive code changes while keeping developer intent intact.

The monthly training series, led by the creators and maintainers of OpenRewrite at Moderne, walks through real-world migrations and modernization patterns. Whether you’re new to recipes or ready to write your own, you’ll learn practical ways to refactor safely and at scale.

If you’ve ever wished refactoring felt as natural — and as fast — as writing code, this is a good place to start.

Course – Black Friday 2025 – NPI (All)
announcement - icon

Yes, we're now running our Black Friday Sale. All Access and Pro are 33% off until 2nd December, 2025:

>> EXPLORE ACCESS NOW

eBook – Mockito – NPI (tag=Mockito)
announcement - icon

Mocking is an essential part of unit testing, and the Mockito library makes it easy to write clean and intuitive unit tests for your Java code.

Get started with mocking and improve your application tests using our Mockito guide:

>> Download the eBook

eBook Jackson – NPI EA – 3 (cat = Jackson)