[Kotlin] 初学者がテストの勉強した話


きっかけ

独学でandroidアプリを開発しています。
アプリを実際に動かすことはできても、テストには触れてきませんでした。
参考にしていた本にも載っていなかったので、ググりながら勉強して行きます。

テストって何?

テストの目的は以下の通り

不具合を発見する
仕事が完了したことを確認する
システムをより優れたものに改良する

(引用元)https://www.techscore.com/tech/Java/Others/JUnit/1/

なるほどなるほど。
動いているからOK、というものではないのですね。

テストの種類

テストは大きく3種類
小規模テスト・・・クラスごと
中規模テスト・・・モジュールレベル
大規模テスト・・・複数のモジュールを跨いだテスト

今回は小規模テスト(Unitテスト)をやって行きます。Unitテストの中にも2種類あります

ローカル単体テスト

module-name/src/test/java/ に書き込む。
・JVMで実行
・androidフレームワークの依存関係が含まれないとき
・時間を最小限に抑えられる

インストゥルメント化単体テスト

module-name/src/androidTest/java/ に書き込む
・ハードウェア エミュレータで実行
・androidフレームワークの依存関係が含まれるとき
・時間がかかる

基本的にはローカル単体テストで、実機テストの際にインスト(以下略)を行うと良いそうです。

単体テストの準備

build.gradle(app)
dependencies {
        // JUnit 4 のフレームワーク
        testImplementation 'junit:junit:4.12'
    }

ローカル単体テストならこれだけでOK
Android Studioでアプリ作成をすると初めから入力されていました。

実行手順

・テストクラスを作成
・テストメソッドを作成
・Run

テストしたいクラスを作成

○クラス名にカーソルを合わし、shift+Command+T
Create New Testを選択する
○クラス名を右クリックからのGo to から選んでもOK
今回は最初に作られるメインアクティビティからテストクラスを作成しました。

Create Testでライブラリーを選択します。

Testing libraryからJunit4を選択しました。

Junitって?

引用

JUnitはJavaプログラム単体テスト用のフレームワークです。みんなが共通のテストフレームワークをもつことで、他人のテストプログラムの修正を容易にします。

選べるバージョンは3〜5までですが、ここでは4を選択します。
一番上のGroovy JUnitはこの方の記事が参考になりました。
工数削減!GroovyでJUnitをシンプルに

Generateの項目にチェックを入れると、あらかじめ以下のメソッドを作成してくれます。

○setUp/@ Before
各メソッドの呼び出し前に実行
○tearDown/@ after
各メソッドの終了後に実行

テストメソッドで重複する項目がある場合に使用します。

テストメソッドをかく

assert〜で始まるメソッドが用意されています。どんな種類があるかはこちら

参考:Junit5との違い

クラスからメソッドを引っ張る

class MainActivityTest {

    @Test
    fun testAddCalculate() {
    //テストしたいクラスをインスタンス化
    val main = MainActivity()

    //Mainクラス内のaddCalculateメソッドを使用する
       val addNum = main.addCalculate(3,2)
        Assert.assertEquals(7, addNum)
    }
}

想定される答えや真偽と合えばテストは成功、違えばメッセージが表示されます

参考

テストの基礎
ローカル単体テストを作成する
TECHSCORE
テストエンジニア
工数削減!GroovyでJUnitをシンプルに
JUnit5 使い方メモ

単体テストを実行するまでの流れはわかりました。
実戦に耐えうるテストにするにはどうすれば良いか、引き続き加筆修正していきます。