
Android TDD CodeLab 01. Testing Basics Task. 1~7

class ExampleUnitTest {
    @Test
    fun addition_isCorrect() {
        assertEquals(4, 2 + 2)
    }
}
//계측 테스트는 거의 항상 Android OS 또는 Android 프레임워크를 사용합니다. 
//InstrumentationRegistry를 사용하여 context를 얻어서 패키지 이름을 테스트 하기 때문에 계측 테스트로 테스트 해야 합니다. 
@RunWith(AndroidJUnit4::class)
class ExampleInstrumentedTest {
    @Test
    fun useAppContext() {
        // Context of the app under test.
        val appContext = InstrumentationRegistry.getInstrumentation().targetContext
        assertEquals("com.example.android.architecture.blueprints.reactive",
            appContext.packageName)
    }
}
//Junit.assertion
assertEquals(result.activeTasksPercent,100f)
assertEquals(result.completedTasksPercent,0f)
//Hamcrest - 가독성이 더 좋음 
//is 에 뒷따옴표가 있는 이유?
//코틀린에서 이미 is는 예약어이다. 
//따라서 hamcrest에서 뒷따옴표를 붙여서 코틀린의 is와 구별한다.
assertThat(result.activeTasksPercent, `is`(100f))
assertThat(result.completedTasksPercent, `is`(0f))
 @Test
    fun getActiveAndCompletedStats_noCompleted_returnsHundredZero() {
        // Create an active tasks (the false makes this active)
        val tasks = listOf<Task>(
            Task("title", "desc", isCompleted = false)
        )
        // Call your function
        val result = getActiveAndCompletedStats(tasks)
        // Check the result
        assertThat(result.activeTasksPercent, `is`(100f))
        assertThat(result.completedTasksPercent, `is`(0f))
    }
package com.example.android.architecture.blueprints.todoapp.statistics
import com.example.android.architecture.blueprints.todoapp.data.Task
import org.hamcrest.MatcherAssert.assertThat
import org.hamcrest.core.Is.`is`
import org.junit.Test
class StatisticsUtilsTest {
    //함수 이름 짓는 법 :  테스트중인 메서드or클래스_작업_예상결과
    @Test
    fun getActiveAndCompletedStats_noCompleted_returnsHundredZero() {
        // Create an active task
        val task1 = Task("test1", "test1", false)
        val task2 = Task("test2", "test2", false)
        val list = listOf<Task>(task1, task2)
        // Call your function
        val result = getActiveAndCompletedStats(list)
        // Check the result
//        assertEquals(result.activeTasksPercent,100f)
//        assertEquals(result.completedTasksPercent,0f)
        assertThat(result.activeTasksPercent, `is`(100f))
        assertThat(result.completedTasksPercent, `is`(0f))
    }
    @Test
    fun getActiveAndCompletedStats_empty_returnsZeros() {
        // Create an active task
        val list = listOf<Task>()
        // Call your function
        val result = getActiveAndCompletedStats(list)
        // Check the result
        assertThat(result.activeTasksPercent, `is`(0f))
        assertThat(result.completedTasksPercent, `is`(0f))
    }
    @Test
    fun getActiveAndCompletedStats_noActive_returnsZeroHundred() {
        // Create an active task
        val task2 = Task("test2", "test2", true)
        val list = listOf<Task>(task2)
        // Call your function
        val result = getActiveAndCompletedStats(list)
        // Check the result
        assertThat(result.activeTasksPercent, `is`(0f))
        assertThat(result.completedTasksPercent, `is`(100f))
    }
    @Test
    fun getActiveAndCompletedStats_error_returnsZeros() {
        // Create an active task
        // Call your function
        val result = getActiveAndCompletedStats(null)
        // Check the result
        assertThat(result.activeTasksPercent, `is`(0f))
        assertThat(result.completedTasksPercent, `is`(0f))
    }
    @Test
    fun getActiveAndCompletedStats_both_returnsFortySixty() {
        // Create an active task
        val task1 = Task("test1", "test1", true)
        val task2 = Task("test2", "test2", true)
        val task3 = Task("test3", "test3", true)
        val task4 = Task("test4", "test4", false)
        val task5 = Task("test5", "test5", false)
        // Call your function
        val result = getActiveAndCompletedStats(listOf(task1, task2, task3, task4, task5))
        // Check the result
        assertThat(result.activeTasksPercent, `is`(40f))
        assertThat(result.completedTasksPercent, `is`(60f))
    }
}
