menu
書いてる野郎
orebike@gmail.com
モック伊藤である。
用途はモックオブジェクトを作って対象の private フィールドに値を突っ込むというもの
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>3.2.4</version> <scope>test</scope> </dependency> </dependencies>
テスト対象はこの exec1 メソッド
public class MyProc { private MyConfig config = new MyConfig(); public String exec1(String p1) { return this.config.getV1() + p1; } }
exec1 の動作に private フィールドに設定されている config が影響しているが、 外部から触ることができないのでどうにかしたい。
public class MyConfig { public String getV1() { return "v1v1v1"; } }
なのでそのままなら結果が v1v1v1hogehoge
みたいなのになる。
それをこのように記述する。
public class MyProcTest { // モック化したい対象を宣言してアノテーションをつける // モックなので実装が無くてよい // フィールド名はモック取替対象で使われているフィールド名に合わせる @Mock MyConfig config; // テスト対象を作成して、モック取替対象であることをアノテーションで示す @InjectMocks MyProc myProc1 = new MyProc(); @Before public void init() { // テスト実行時に内部実装をモックへ取り替える MockitoAnnotations.initMocks(this); } @Test public void exec1Test() { // モックのメソッド実行結果を定義する when(config1.getV1()).thenReturn("testtesttest"); System.out.println(myProc1.exec1("hogehoge")); // testtesttesthogehoge } }