LoginSignup
12
13

More than 5 years have passed since last update.

Kotlinでprivateメソッドをテストする

Last updated at Posted at 2018-05-13

0.はじめに

基本はJunitのソースコードの置き換え
Junit同様にリフレクションを使用

1.テストしたコード

Sample001クラス
 ・privateメソッドを持つテスト対象のクラス

Sample001.kt
class Sample001 {
    private fun privateMethod () : String { return "I am private"}
}

Sample001Testクラス
 ・privateメソッドのテストコード

Sample001Test.kt
import org.junit.Test
import java.lang.reflect.Method
import kotlin.test.assertEquals

class Sample001Test {
    @Test
    fun privateTest () {
        // テストクラスのインスタンス生成
        var sample001 = Sample001()
        // メソッド格納用
        var method : Method
        // テストクラスからprivateメソッドの取り出し(リフレクション)
        // 今回はSample001.privateMethod()を取得する
        method = sample001.javaClass.getDeclaredMethod("privateMethod")
        // privateメソッドをアクセス可能に変更
        method.trySetAccessible()

        // 実行
        assertEquals("I am private", method.invoke(sample001) as String)
    }
}

2.引数を指定する

Sample001クラス
 ・エコー(引数をそのまま返す)メソッドの実装

Sample001.kt
private fun privateMethodB (v :String) : String { return v }

Sample001Testクラス
 ・引数付きprivateメソッドの指定部分を次の記述に変更

Sample001Test.kt
// 引数の型(String)を String::class.java で指定する
method = sample001.javaClass.getDeclaredMethod("privateMethodB", String::class.java)

// 実行
assertEquals("BBB", method.invoke(sample001, "BBB") as String)

3.感想とか

 String::class.java って書くところを String.javaClass ってずーっと書いてて詰まった

12
13
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
12
13