0Pricing
Testing Mastery: JUnit, Mockito & Integration Tests · レッスン

MockitoでMockを作成する

Mockitoを使って依存関係のMockオブジェクトを作成し、テスト対象の単位を協調オブジェクトから分離します。

「MockitoでMockを作成する」はCoddyKit上の無料Testing Mastery: JUnit, Mockito & Integration Testsレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはTesting Mastery: JUnit, Mockito & Integration Tests学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Testing Mastery: JUnit, Mockito & Integration Testsコースには全4レッスンが含まれています。

このレッスンの一部はまだ翻訳されておらず、英語で表示されています。

Intro to Mockito Mocks

In the previous lesson, we learned about the concept of a mock object. Mocks are special test doubles that let us control the behavior of dependencies.

Now, we'll dive into Mockito, a popular Java mocking framework, to see how easy it is to create these powerful tools for your tests.

Why Create Mocks?

Creating mocks is crucial for effective unit testing:

  • Isolation: Mocks allow you to test a single unit of code in isolation, without worrying about its real dependencies.
  • Control: You can program mocks to behave exactly as needed for your test scenario, simulating various outcomes.
  • Speed: Mocks avoid slow operations like database calls or network requests, making your tests run much faster.

The `Mockito.mock()` Method

The simplest way to create a mock object in Mockito is by using the Mockito.mock() static method. You pass it the Class or Interface you want to mock.

It returns a new mock instance that looks and acts like the real object, but without its actual implementation logic.

Basic Mock Creation Example

Let's create a mock for a simple EmailService interface. Run the code to see how a mock object is created.

import org.mockito.Mockito;

interface EmailService {
  void sendEmail(String to, String subject, String body);
  String getServiceStatus();
}

public class Main {
  public static void main(String[] args) {
    EmailService mockEmailService = Mockito.mock(EmailService.class);
    System.out.println("Mock created: " + mockEmailService.getClass().getName());
  }
}

Understanding Default Mock Behavior

What happens if you call a method on a mock without telling it what to do?

  • Objects: Methods returning objects will return null.
  • Primitives: Methods returning primitive types (like int, boolean) will return their default values (0, false).
  • Collections: Methods returning collections will return empty collections.
  • Void: Methods returning void do nothing.

Default Behavior in Action

Let's call a method on our mockEmailService without any configuration. Observe the default return value.

import org.mockito.Mockito;

interface EmailService {
  void sendEmail(String to, String subject, String body);
  String getServiceStatus();
}

public class Main {
  public static void main(String[] args) {
    EmailService mockEmailService = Mockito.mock(EmailService.class);
    
    // Calling a method that returns an object
    String status = mockEmailService.getServiceStatus();
    System.out.println("Default status: " + status);
    
    // Calling a void method (does nothing by default)
    mockEmailService.sendEmail("test@example.com", "Hi", "Hello");
    System.out.println("Void method called (no output)");
  }
}

Creating Mocks with `@Mock`

While Mockito.mock() works, for tests, Mockito offers a more convenient way using the @Mock annotation.

You simply declare a field with @Mock, and Mockito takes care of initializing it into a mock object.

Initializing `@Mock` Annotations

For @Mock annotations to work, you need to tell Mockito to process them. In JUnit 5, this is typically done using the @ExtendWith(MockitoExtension.class) annotation on your test class.

Alternatively, you can manually initialize them using MockitoAnnotations.openMocks(this).

Example: Using `@Mock` Annotation

This example simulates a test class where @Mock is used. Run it to see the mock initialized via MockitoAnnotations.openMocks().

import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

interface DataRepository {
  String fetchData();
}

// Simulate a test class structure
class MyServiceTest {
  @Mock
  DataRepository mockRepository;

  public MyServiceTest() {
    // Manually open mocks for demonstration in main
    MockitoAnnotations.openMocks(this);
  }
}

public class Main {
  public static void main(String[] args) {
    MyServiceTest testInstance = new MyServiceTest();
    System.out.println("Mocked repository: " + testInstance.mockRepository.getClass().getName());
    System.out.println("Default fetch data: " + testInstance.mockRepository.fetchData());
  }
}

Quick Check on Mocks

You want to create a mock object for an interface called PaymentGateway. Which of the following is a correct and common way to do this in Mockito?

Recap: Creating Mocks

You've learned the fundamental ways to create mock objects with Mockito:

  • Use Mockito.mock(ClassToMock.class) for direct creation.
  • Use the @Mock annotation on a field, typically initialized by @ExtendWith(MockitoExtension.class) in JUnit 5.
  • Mocks return default values (null, 0, false) for method calls if not configured otherwise.

Next, we'll learn how to verify that your mocks were called as expected!

よくある質問

「MockitoでMockを作成する」レッスンは無料ですか?

はい。「MockitoでMockを作成する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Testing Mastery: JUnit, Mockito & Integration Testsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Testing Mastery: JUnit, Mockito & Integration Testsコースには全4レッスンが含まれています。

「MockitoでMockを作成する」で何を学びますか?

Mockitoを使って依存関係のMockオブジェクトを作成し、テスト対象の単位を協調オブジェクトから分離します。 ブラウザで直接実行するハンズオンコードでTesting Mastery: JUnit, Mockito & Integration Testsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Testing Mastery: JUnit, Mockito & Integration Testsを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのTesting Mastery: JUnit, Mockito & Integration Testsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「MockitoでMockを作成する」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このTesting Mastery: JUnit, Mockito & Integration Testsレッスンでコードを書いて実行できますか?

はい。すべてのTesting Mastery: JUnit, Mockito & Integration Testsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Mock、Stub、Fake
  2. MockitoでMockを作成する
  3. Mockのインタラクションを検証する
  4. @Mockと@InjectMocksによるモックの注入
← Testing Mastery: JUnit, Mockito & Integration Testsに戻る