Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
12
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

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

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

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
12
Help us understand the problem. What are the problem?