JUnit을 사용한 이유
→ 안드로이드 테스트의 기본 테스트 프레임 워크
Android 테스트 방법
JUnit 구성 요소
@Test
fun test() {
val result = 2+3
assertEquals(5, result)
}@Before
fun setup(){
test = Test()
}@After
fun tearDown(){
// DB 닫기, MockServer 종료 등
}| assertEquals(expected, actual) | 두 값이 동일한지 확인 |
|---|---|
| assertNotEqualse(expected, actual) | 두 값이 다른지 확인 |
| assertTrue(condition) | 조건이 true인지 확인 |
| assertFalse(condition) | 조건이 false인지 확인 |
| assertNull(value) | 값이 null인지 확인 |
| assertNotNull(value) | 값이 null이 아닌지 확인 |
| assertThrows(Exception::class.java) {…} | 특정 예외가 발생하는지 확인 |
@Ignore("API 수정 중으로 테스트 제외")
@Test
fun apiTest() {...}@get:Rule
val testRule = TestRule()class UserService(private val userRepository: UserRepository) {
fun getUserName(id: String) : String {
return userRepository.findById(id).name
}
} → 이 경우 UserRepository는 DB와 통신할 수 있고, 네트워크를 호출할 수 있다. 그럼 테스트 시 실제 DB연결이나 서버 호출이 일어날 수 있으므로 단위 테스트(Unit Test)의 목적(”하나의 로직만 검증”)에 어긋난다. → 그래서 “진짜 객체” 대신 “가짜(Mock) 객체”를 만들어서 외부 의존성을 대채한다.| Mockito | MockK | |
|---|---|---|
| 주요 언어 | Java 기반 | Kotlin 전용 |
| Mock 생성 | Mockito.mock() | mockk() |
| 동작 설정 | when(…).thenReturn(…) | every {…} returns … |
| 호출 검증 | verify(…) | verify {…} |
| 특징 | 전통적인 Mocking 라이브러리 | 코루틴, suspend 함수, DSL 친화적 |