17
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PowerMokitoでstaticクラスをSpyする。

Last updated at Posted at 2015-09-07

mockitoでスタティッククラスをmock化する方法や、mock化されたオブジェクトをSpyする方法は検索すると結構ひっかかったのですが、Staticクラスの1部のメソッドだけをmock化する方法がなかなか見つからなかったので自分用にメモ。

@RunWith(PowerMockRunner.class)
@PrepareForTest({DateUtil.class, ... })
public class AAATest {

@Before
public void setUp() throws Exception {
	PowerMockito.spy(DateUtil.class);
}

@Test
public void test() {

	Date systemDate = DateUtil.toDate("2015/01/01"); // Mockの戻り値

	// Mockの振る舞い定義は前置記法で2行続けて記述する
	PowerMockito.doReturn(systemDate).when(DateUtil.class);
	DateUtil.getSystemDate(); // この呼び出しがMock化される
    
    Date expectedDate = DateUtil.toDate("2015/01/01")
    Assert.assertThat(DateUtil.getSystemDate(), is(expectedDate))
}


Static#getSystemDate()の呼び出しはMock化され、それ以外のメソッドDateUtil#toDate(String)等の呼び出しは実際のロジックが呼び出されるようになります。

その他気づいたこと

new

  • コンストラクタ(new)をMock化するときは@prepareForTestにテスト対象のクラスを設定しないと動作しない。

static method

  • newのMock化を使用せず、static methodだけのMock化ならば@prepareForTestにテスト対象を追加しないほうがいい。
  • Jacoco(EclEmma)などを使用してカバレッジを採ることができる。
17
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?