프로그래밍 놀이터/안드로이드, Java

[android] Testing your database - Room 에 대해 알아보자

돼지왕 왕돼지 2021. 5. 4. 12:55
반응형

-

2가지 테스트 방법이 있다.

하나는 android 단말에서 테스트.

다른 하나는 host 개발 장비에서 (not recommended)

 

 

-

테스트를 앱에서 돌릴 때 Room 은 DAO class 에 대한 mock 생성을 허용한다.

그래서 full db 를 만들 필요 없이 테스트 할 수 있다.

이 기능은 DAO 가 db 에 대한 detail 을 제공하지 않기에 가능하다.

 

 

Test on an Android device

 

-

db 테스트로 권유되는 방법은 Android 단말 위에서 도는 JUnit test 를 돌리는 것이다.

이 테스트는 acivity 를 만들 필요도 없고, UI test 보다 훨씬 빠르기 떄문이다.

 

 

-

test 를 세팅하면, in-memory version 의 db 를 만들어 테스트 하면 된다.

@RunWith(AndroidJUnit4::class)
class SimpleEntityReadWriteTest {
    private lateinit var userDao: UserDao
    private lateinit var db: TestDatabase

    @Before
    fun createDb() {
        val context = ApplicationProvider.getApplicationContext<Context>()
        db = Room.inMemoryDatabaseBuilder(context, TestDatabase::class.java).build()
        userDao = db.getUserDao()
    }

    @After
    @Throws(IOException::class)
    fun closeDb() {
        db.close()
    }

    @Test
    @Throws(Exception::class)
    fun writeUserAndReadInList() {
        val user: User = TestUtil.createUser(3).apply {
            setName("george")
        }
        userDao.insert(user)
        
        val byName = userDao.findUsersByName("george")
        assertThat(byName.get(0), equalTo(user))
    }
}

 

 

 

Test on your host machine

 

-

Room 은 SQLite support lib 을 사용하며, 이는 android framework class 안에서 제공하는 interface 를 제공한다.

그래서 이 interface 에 대한 custom impl 을 전달함으로써 db query 를 테스트 할 수 있다.

 

 

-

이 케이스에 테스트는 매우 빠를 수 있으나, 단말의 SQLite 버전이 host machine 의 것과 일치하지 않을 수 있기 때문에 추천하지 않는다.

 

 

-

참고자료

https://developer.android.com/training/data-storage/room/testing-db

 

 

 

 

반응형