現在、kotlinプロジェクトでJavaを使用しています。コード全体をゆっくりと後者に移行しています。
Mockkを使用してUri.parse()
などの静的メソッドをモックすることはできますか?
サンプルコードはどのように見えますか?
MockKは静的なJavaメソッドをモックできます。主な目的はKotlin拡張関数のモックであるため、PowerMockほど強力ではありませんが、それでもJava静的メソッド。
構文は次のとおりです。
staticMockk<Uri>().use {
every { Uri.parse("http://test/path") } returns Uri("http", "test", "path")
assertEquals(Uri("http", "test", "path"), Uri.parse("http://test/path"))
verify { Uri.parse("http://test/path") }
}
Oleksiypの答えに加えて:
Mockkバージョン1.8.1は、以下のソリューションを非推奨にしました。そのバージョンの後、あなたはすべきです:
@Before
fun mockAllUriInteractions() {
mockkStatic(Uri::class)
every { Uri.parse("http://test/path") } returns Uri("http", "test", "path")
}
mockkStatic
は呼び出されるたびにクリアされるため、モックを解除する必要はありません
非推奨:
1つのテストケースだけでなく、常にその模擬動作が必要な場合は、@Before
および@After
を使用して模擬動作を実行できます。
@Before
fun mockAllUriInteractions() {
staticMockk<Uri>().mock()
every { Uri.parse("http://test/path") } returns Uri("http", "test", "path") //This line can also be in any @Test case
}
@After
fun unmockAllUriInteractions() {
staticMockk<Uri>().unmock()
}
このように、クラスのより多くの部分でUriクラスを使用することが予想される場合、コードをどこでも.use
で汚染するのではなく、1つの場所でモックすることができます。