프로그래밍 놀이터/안드로이드, 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
반응형