3/28 수업

hyunji·2023년 3월 28일
0

오목 피드백

라이브 코딩

DAO(Data Access Object)

  • 데이터베이스의 data에 접근하기 위한 객체
  • DataBase에 접근 하기 위한 로직 & 비지니스 로직을 분리하기 위해 사용

SQLitebase를 생성자로 만들지 아니면 받을 지 고민해보는 것도 좋음

readable과 writable DB의 차이

  • 둘의 차이를 고려해 DAO로 context를 넘겨주면 해당 함수에 맞는 DB를 사용 가능

Junit4 안드로이드 테스트

  • Junit4로 안드로이드를 테스트하기 위해선 4에선 @RunWith(AndroidJUnit4::class) 선언
@RunWith(AndroidJUnit4::class)
class EntryDaoTest {
	@Test
    fun save(){
    	val entryDao = Entry(ApplicationProvider.getApplicationContext())
        entryDao.insert(Entry("test1", "test2"))
    }
    
    @Test
    fun save(){
    	val entryDao = Entry(ApplicationProvider.getApplicationContext())
        val entries = entryDao.select()
        assertThat(entries).hasSize()
    }
}
  • 이 테스트 코드의 문제점은 초기화를 안한다는 것!
  • 테스트 코드의 중복을 방지하기 위해서! 데베를 DROP 하는 함수를 만들어 테스트 코드에서 실행해주기.
@Before
fun setUp(){
	entryDao = EntryDao(pplicationProvider.getApplicationContext())
}

@After
fun tearDrop(){
	//데이터 Drop시키는 코드...
}
  • save를 이렇게 테스트 할 수도 있다.
    @Test
    fun save(){
    	val entry = Entry("test1", "test2")
        assertThat(entries).isZero
        entryDao.insert(entry)
        assertThat(entries).isNotZero
    }
  • data class Entry의 id가 var인 것을 회수하기 위해서 insert() 함수 마지막에 return entry.copy(id = id)
    - var id가 싫어파 일때
    - DTO라고 하고 찐 Entry class 생성하는 법 있음
  • insert 함수에서 entry를 반환하지 않고 테스트하는 법이 있을까?

interface EntryDao {
	fun save(entry: Entry)
    fun findAll(): List<Entry>
}

class FakeEntryDao: EntryDao{
	private val entries: MutableMap<Long, Entry> = mutableMapOf()
    
    override fun save(entry: Entry){
    
    }
    
    override fun findAll(): List<Entry>{
    
    }
}

class EntryServiceTest{
	private lateinit var entryDao: EntryDao
    
    @Before
    fun setUp(){
    	val entry = FakeEntryDao()
    }
    
    @Test
    fun `부제가 비어있으면 없음으로 저장`(){
    	val entryService = EntryService(entryDao)
        entryService.save("test", "   ")
        val actual = entryDao.findAll().first { it.title == "title" }
        asserThat(actual)....
    }
}
  • 안드로이드 테스트에는 DAO에대한 테스트도 가능하다....

레벨 1에 대한 전반적인 질문

  • 레벨1포인트: 테스트코드 강박관념

0개의 댓글