Kotlinでデータベースのテストを行う方法を徹底解説!初心者でもわかるRoomのテスト入門
生徒
「KotlinでRoomデータベースを使っているんですが、ちゃんと正しく動いてるかテストする方法ってあるんですか?」
先生
「もちろんありますよ。KotlinでRoomを使うときは、テストもとても大切なんです。今回は、初心者でもできるRoomデータベースのテスト方法をわかりやすく紹介しますね。」
生徒
「テストって難しそうですが、自分でもできるでしょうか?」
先生
「大丈夫ですよ。難しいコードは使わずに、1つずつ丁寧に説明していきます。」
1. Roomのテストってなに?
テストとは、プログラムが正しく動くかどうかを確認する作業のことです。KotlinでRoom(ルーム)という仕組みを使ってアプリの中にデータを保存しているとき、「ちゃんと保存できたかな?」「ちゃんと読み込めたかな?」というのを調べるためにテストをします。
特に初心者の方がやりがちなのは、「画面で見て確認する」だけです。でも、それだけでは本当に正しく動いているか分からないこともあります。そんなときに使うのが、自動で確認できるテストです。
2. テスト用のRoomデータベースを作ろう
通常のRoomデータベースはスマホの中に保存されますが、テストのときは本物のデータを壊さないように、テスト専用のデータベースを一時的に使います。
これを「インメモリデータベース」と言います。英語で "In-Memory"(インメモリ)と書きますが、「メモリの中だけに一時的に作るデータベース」という意味です。スマホには保存されません。
@get:Rule
val instantTaskExecutorRule = InstantTaskExecutorRule()
private lateinit var database: AppDatabase
private lateinit var userDao: UserDao
@Before
fun setup() {
database = Room.inMemoryDatabaseBuilder(
ApplicationProvider.getApplicationContext(),
AppDatabase::class.java
).allowMainThreadQueries().build()
userDao = database.userDao()
}
@After
fun tearDown() {
database.close()
}
inMemoryDatabaseBuilderを使うと、実際のスマホには保存されないテスト用のRoomデータベースが作れます。
3. DAOのテストを書いてみよう
DAO(ダオ)というのは、データを読み書きするための入り口のようなものです。insertやgetAllといった関数が用意されています。DAOが正しく動くかをテストすることで、データベースの処理が間違っていないか確認できます。
@Test
fun insertUserAndGetAll_returnsCorrectUser() = runTest {
val user = User(id = 1, name = "太郎", age = 20)
userDao.insert(user)
val result = userDao.getAll()
assertThat(result).contains(user)
}
このようにテスト関数を作って、「保存したらちゃんと取り出せるか」を確認しています。
Kotlinを基礎からしっかり学びたい人や、 Java経験を活かしてモダンな言語にステップアップしたい人には、 定番の入門書がこちらです。
基礎からわかるKotlinをAmazonで見る※ Amazon広告リンク
4. テストを動かすには?
テストを書くと終わりではなく、実行する必要があります。Android Studio(アンドロイドスタジオ)を使っている場合、書いたテスト関数の左側にある「▶」ボタンを押すだけでテストが始まります。
うまくいった場合は「緑のチェック」、失敗すると「赤いバツ」が表示されます。テストが失敗したときは、何が間違っているのかメッセージが表示されるので、それを見て直していきます。
5. Roomのテストでよく使う便利な道具
KotlinでRoomをテストするとき、次のような道具をよく使います。
JUnit(ジェイユニット):テストの基本的な機能を提供する仕組みassertThat:予想通りの結果になったか確認する関数runTest:コルーチンの中でテストを書くときに使う関数@Beforeと@After:テストの前後で準備や後片付けをするアノテーション
これらを使うことで、しっかりとしたテストが書けるようになります。
6. 初心者が気をつけるポイント
はじめてRoomのテストを書くときは、次の点に注意しましょう。
- 本番用のデータベースではなく、必ず
inMemoryDatabaseBuilderを使う - テストの中で
allowMainThreadQueries()を付ける(初心者向けには簡単に動かすため) - データベースは
@Afterで必ずclose()して終了する
また、エラーが出たときは焦らずに、エラーメッセージを読んで対処しましょう。
7. 実行結果の例
テストを実行すると、結果が次のように表示されます。
Tests passed: 1 of 1 test – insertUserAndGetAll_returnsCorrectUser
これが表示されれば、テストは成功です。Roomを使った保存や読み込みが正しくできていることが分かります。