Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

Fravash
好きな食べ物はトマト 投稿内容でお気づきの点等ございましたら気軽にコメントください。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away