Skip to content

Commit 5ded1e6

Browse files
committed
feat: search room test code 테스트 완료
1 parent 33260b1 commit 5ded1e6

5 files changed

Lines changed: 72 additions & 34 deletions

File tree

app/src/androidTest/java/com/seok/gfd/room/dao/SearchGithubIdDaoTest.kt

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,13 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
55
import androidx.test.platform.app.InstrumentationRegistry
66
import com.seok.gfd.room.AppDatabase
77
import com.seok.gfd.room.entity.SearchGithubId
8+
import kotlinx.coroutines.runBlocking
89
import org.junit.After
910
import org.junit.Before
1011

1112
import org.junit.Assert.*
1213
import org.junit.Test
1314
import org.junit.runner.RunWith
14-
import java.io.IOException
15-
import java.util.*
1615

1716
@RunWith(AndroidJUnit4::class)
1817
class SearchGithubIdDaoTest {
@@ -21,17 +20,35 @@ class SearchGithubIdDaoTest {
2120
@Before
2221
fun createDb() {
2322
val context = InstrumentationRegistry.getInstrumentation().targetContext
23+
assertEquals("com.seok.gfd", context.packageName)
24+
25+
db = Room.inMemoryDatabaseBuilder(
26+
context,
27+
AppDatabase::class.java
28+
).build()
2429
}
2530

2631
@After
27-
@Throws(IOException::class)
28-
fun closeDb(){
32+
fun closeDb() = runBlocking {
33+
db.searchGithubIdDao().deleteAll()
2934
db.close()
3035
}
3136

3237
@Test
33-
@Throws(Exception::class)
34-
fun write(){
38+
fun iWantToKnowTheDatabaseIsFind() = runBlocking{
39+
val searchGithubId = SearchGithubId(gid = 0, gidName = "github")
40+
41+
db.searchGithubIdDao().insert(searchGithubId)
42+
var entity = db.searchGithubIdDao().selectAll("g")[0]
43+
assertHabitEquals(searchGithubId, entity)
44+
45+
db.searchGithubIdDao().delete(entity)
46+
assertEquals(0, db.searchGithubIdDao().selectAll("g").size)
47+
}
48+
49+
private fun assertHabitEquals(expected: SearchGithubId, actual: SearchGithubId) {
50+
// id 는 자동생성되므로, 검증을 위해서 id의 동일성은 무시하자.
51+
assertEquals(expected.copy(gid = 0), actual.copy(gid = 0))
3552
}
3653

3754
}

app/src/main/java/com/seok/gfd/room/AppDatabase.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@ import com.seok.gfd.room.dao.SearchGithubIdDao
66
import com.seok.gfd.room.entity.SearchGithubId
77

88
@Database(entities = [SearchGithubId::class], version = 1)
9-
abstract class AppDatabase : RoomDatabase() {
10-
abstract fun searchGithubDao() : SearchGithubIdDao
9+
abstract class AppDatabase : RoomDatabase(){
10+
abstract fun searchGithubIdDao(): SearchGithubIdDao
1111
}

app/src/main/java/com/seok/gfd/room/dao/SearchGithubIdDao.kt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,19 @@ package com.seok.gfd.room.dao
33
import androidx.room.*
44
import com.seok.gfd.room.entity.SearchGithubId
55

6+
private const val TABLE_NAME = "search_github_ids"
7+
68
@Dao
79
interface SearchGithubIdDao {
810
@Insert(onConflict = OnConflictStrategy.REPLACE)
9-
suspend fun insert(searchGithubId: SearchGithubId) : Int
11+
suspend fun insert(searchGithubId: SearchGithubId) : Long
1012

1113
@Delete
1214
suspend fun delete(searchGithubId: SearchGithubId)
1315

14-
// @Query("SELECT * FROM $TABLE_NAME WHERE gid_name = :gidName")
15-
abstract fun selectAll(gidName : String) : List<SearchGithubId>
16+
@Query("SELECT * FROM $TABLE_NAME WHERE gid_name LIKE :gidName || '%'")
17+
suspend fun selectAll(gidName : String) : List<SearchGithubId>
18+
19+
@Query("delete from $TABLE_NAME")
20+
suspend fun deleteAll()
1621
}
Lines changed: 7 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,14 @@
11
package com.seok.gfd.room.entity
22

3-
import androidx.room.*
4-
import java.util.*
3+
import androidx.room.ColumnInfo
4+
import androidx.room.Entity
5+
import androidx.room.PrimaryKey
56

67
private const val TABLE_NAME = "search_github_ids"
78

89
@Entity(tableName = TABLE_NAME)
910
data class SearchGithubId(
10-
@PrimaryKey(autoGenerate = true) var gid: Int,
11-
@ColumnInfo(name = "gid_name") val gidName: String?,
12-
@ColumnInfo(name = "created", defaultValue = "CURRENT_TIMESTAMP") val created: Date? = Date()
13-
)
14-
15-
@Dao
16-
interface SearchGithubIdDao {
17-
@Insert(onConflict = OnConflictStrategy.REPLACE)
18-
suspend fun insert(searchGithubId: SearchGithubId) : Int
19-
20-
@Delete
21-
suspend fun delete(searchGithubId: SearchGithubId)
22-
23-
@Query("SELECT * FROM $TABLE_NAME WHERE gid_name = :gidName")
24-
suspend fun selectAll(gidName : String) : List<SearchGithubId>
25-
}
26-
27-
@Database(entities = [SearchGithubId::class], version = 1)
28-
abstract class AppDatabase : RoomDatabase(){
29-
abstract fun searchGithubIdDao(): SearchGithubIdDao
30-
}
11+
@PrimaryKey(autoGenerate = true) var gid: Long,
12+
@ColumnInfo(name = "gid_name") val gidName: String?
13+
// @ColumnInfo(name = "created", defaultValue = "CURRENT_TIMESTAMP") val created: Date? = Date()
14+
)

app/src/main/java/com/seok/gfd/views/SearchActivity.kt

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
package com.seok.gfd.views
22

33
import android.os.Bundle
4+
import android.util.Log
45
import android.view.WindowManager
56
import android.view.animation.AnimationUtils
67
import androidx.appcompat.app.AppCompatActivity
8+
import androidx.room.Room
79
import com.seok.gfd.R
10+
import com.seok.gfd.room.AppDatabase
11+
import com.seok.gfd.room.entity.SearchGithubId
812
import kotlinx.android.synthetic.main.activity_search.*
13+
import kotlinx.coroutines.runBlocking
914

1015
class SearchActivity : AppCompatActivity() {
1116
override fun onCreate(savedInstanceState: Bundle?) {
@@ -14,6 +19,9 @@ class SearchActivity : AppCompatActivity() {
1419
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)
1520

1621
setAnimation()
22+
23+
24+
iWantToKnowTheDatabaseIsFind()
1725
}
1826

1927
private fun setAnimation() {
@@ -26,4 +34,28 @@ class SearchActivity : AppCompatActivity() {
2634
leftToRight.startOffset = 800
2735
search_layout_id.startAnimation(leftToRight)
2836
}
37+
38+
private fun iWantToKnowTheDatabaseIsFind() {
39+
// 테스트 용으로 메모리상 생성
40+
val database = Room.inMemoryDatabaseBuilder(
41+
this,
42+
AppDatabase::class.java
43+
).build()
44+
45+
// id를 0 으로 설정해주어서 id가 autoGeneration 되게 한다.
46+
val test = SearchGithubId(gid = 0, gidName = "test")
47+
runBlocking {
48+
// 습관을 씁니다.
49+
database.searchGithubIdDao().insert(test)
50+
51+
// 실제 DB에 써진 것을 확인합니다.
52+
var dbHabitSchema = database.searchGithubIdDao().selectAll("t")[0]
53+
Log.d(this.javaClass.name, "방금 넣은 것 $dbHabitSchema")
54+
55+
// 지우는 것도 잘 동작하는지 확인해 봅니다.
56+
database.searchGithubIdDao().delete(dbHabitSchema)
57+
58+
Log.d(this.javaClass.name, "방금 지워서 아무것도 없음. ${database.searchGithubIdDao().selectAll("t")}")
59+
}
60+
}
2961
}

0 commit comments

Comments
 (0)