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 ってずーっと書いてて詰まった