Mockitoについて
Javaのユニットテスト用に開発されたモックフレームワーク、テストでモックオブジェクトを直感的に操作できることを目的として開発されている
モックについて
外観・ユーザーインターフェイスの振る舞いを模倣したハリボテみたいなもの
言い換えると、テストしたいオブジェクト(クラス・インスタンス)の中に別のオブジェクトのメソッドが呼び出されているものの振る舞いを模倣する
ソースコード例
chatGPTで生成してちょこちょこ変えました、chatGPT便利
UserService.java
public class UserService {
private UserRepository userRepository;
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
public User getUserById(int userId) {
return userRepository.findById(userId);
}
}
UserRepository.java
public interface UserRepository {
User findById(int userId);
}
UserServiceTest.java
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class UserServiceTest {
@Test
public void testGetUserById() {
// UserRepositoryのモックを作成
UserRepository userRepository = Mockito.mock(UserRepository.class);
// モックの振る舞いを設定
User mockUser = new User(1, "John");
Mockito.when(userRepository.findById(1)).thenReturn(mockUser);
// UserServiceをモックのリポジトリと一緒にインスタンス化
UserService userService = new UserService(userRepository);
// テスト対象のメソッドを呼び出し
User user = userService.getUserById(1);
// 結果の検証
assertEquals(1, user.getId());
assertEquals("John", user.getName());
}
}
最後に
モックを調べたらスタブとドライバ辺りも詳しく調べてみると良さそう
参考文献