やりたいこと
- Staticメソッドをテストする
- テスト対象メソッドで別クラスのStaticメソッドを呼んでいる
- テストを対象メソッドに絞るため、呼び出すメソッドはmockにしたい
サンプルコード
- 使ったもの
- JUnit
- mockito
- static mock
テスト対象コード
テスト対象クラス
public class ReturnStringClass {
public static String returnStr(){
// getStrから文字列を取得
String str = ManageStringClass.getStr();
// 返り値は取得した文字列
return str;
}
}
テスト対象クラスから呼び出すクラス
public class ManageStringClass {
public static String getStr(){
// 文字列を定義
String str = "test from method";
// 定義した文字列を取得
return str;
}
}
サンプルコード実行結果
テスト対象メソッドをmainで呼び出すとこんな感じ
public class main {
public static void main(String[] args){
System.out.println(ReturnStringClass.returnStr());
}
}
実行するとtest from method
が出力される
テストコード
- mock化した値が入っていることを明確にするため、
getStr()
とは別の返り値をmockで定義した
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.mockito.MockedStatic;
import org.mockito.Mockito;
public class ReturnStringClassTest {
@Test
void testReturnStr(){
// ManageStringClassのmock化
MockedStatic<ManageStringClass> mocked = Mockito.mockStatic(ManageStringClass.class);
// mock化したクラスのメソッド返り値を定義
mocked.when(ManageStringClass::getStr).thenReturn("test from Mock");
// テスト対象を呼び出し
String testStr = ReturnStringClass.returnStr();
// mock化した値が返ってきているか確認
Assertions.assertEquals("test from Mock", testStr);
}
}
テスト実行結果
Test passed
を確認
実行時の環境(build.gradle)
- バージョンは各自新しいものをご確認ください
plugins {
id 'java'
}
group 'org.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
// https://mvnrepository.com/artifact/org.mockito/mockito-core
testImplementation 'org.mockito:mockito-core:4.3.1'
// https://mvnrepository.com/artifact/org.mockito/mockito-inline
testImplementation 'org.mockito:mockito-inline:4.3.1'
// https://mvnrepository.com/artifact/net.bytebuddy/byte-buddy
implementation 'net.bytebuddy:byte-buddy:1.12.8'
// https://mvnrepository.com/artifact/net.bytebuddy/byte-buddy-agent
testImplementation 'net.bytebuddy:byte-buddy-agent:1.12.8'
}
test {
useJUnitPlatform()
}
コメント