JUnit + Mockito で 単体テストする

最終更新日:2022‐04-10

最近Mockitoを触ることになったのですが、日本語のドキュメントが少ないので備忘録を残すことにしました。

ポイント

@Mockアノテーション

モックとして作成したいクラスを指定します。

@InjectMocksアノテーション

作成したMockのインスタンスを挿入するクラスを指定します。インスタンスはNewしなくても自動的に生成されます。
以下のコードでMockがNewされます。MockitoAnnotations#initMocksは廃止予定となっているようなのでopenMocksを使用しましょう。

MockitoAnnotations.openMocks(this);

サンプルコード

package sandbox;

import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

import jp.eaglet.code.sandbox.MainController;
import jp.eaglet.code.sandbox.User;
import jp.eaglet.code.sandbox.UserRepository;

class MainControllerTest {
	@Mock
	UserRepository userRepository;
	
	@InjectMocks
	MainController mainController;

	@BeforeAll
	static void setUpBeforeClass() throws Exception {
	}

	@AfterAll
	static void tearDownAfterClass() throws Exception {
	}

	@BeforeEach
	void setUp() throws Exception {
        MockitoAnnotations.openMocks(this);
	}

	@AfterEach
	void tearDown() throws Exception {
	}

	@Test
	void testAddNewUser() {
		String name="hoge";
		String email = "fuga@test.co.jp";
		String ret = mainController.addNewUser(name, email);
		
		assertEquals("Saved",ret);
	}

	@Test
	void testGetAllUsers() {
		Iterable<User> ret = mainController.getAllUsers();
		assertNotNull(ret);
	}
}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です