Unit Test
- local unit test - JVM only
- instrumented unit test - physical device , emulator
#JUnit : Unit Test Framework
#Mokito : Mock Object 구현 도와줌 mock: 실제 객체를 만들기에는 시간 비용 낭비, 의존성이 크게 걸쳐져 있어 테스트시 제대로 구현 어려워 가짜 객체 만들어 사용하는 것
#Robolectric : 배포 설치가 필요없도록 내 PC 의 JVM에서 안드로이드 코드를 실행해줌
#Hamcrest : Test Class에서 사용하는 assert() 같은 Matcher 을 확장한 라이브러리
- JUnit의 assertEquals를 사용하는 대신 Hamcrest의 assertThat구조와 표준 matcher 세트를 사용(명확한 값을 비교하기 위해 사용 )
왜? 더 유연하기도 하고 assertThat 을 이용하면 expected 와 actual을 헷갈리지 않고 의미를 분명히 할 수 있음
ex) assertThat(actual, is(expected)) // acual 이 expected 와 같다는 식으로 문장을 읽기도 함
assertThat(actual, is(not(expected)))
assertThat("", actual, matcher ) // matcher → anyOf( and 논리 연산자처럼 동작 ) allOf ..
http://junit.sourceforge.net/javadoc/org/junit/Assert.html // 이건 junit 의 assert 함수 모음
#JUnit
- JUnit 을 이용한 테스팅은 aseertXXX 함수를 이용해 기댓값과 실제값을 비교해 테스팅 통과 여부를 정함
- JUnit annotation
@BEFORE : 테스트 시작 전
@TEST : 하나의 단위테스트 만들기
@AFTER : 테스트 완료되고
@RunWith : 라이브러리 사용
#테스트 함수 작성하기
1.Given : 실제 테스팅에 필요한 action 전의 객체를 만드는 등의 set-up 을 한다
ex) task 라는 list 를 만들어서 action 전의 set-up을 함
2. When : 실제 테스팅 하려는 action을 진행
ex) 테스팅할 action인 함수를 호출해 시행
3.Then : assert 부분으로 앞의 Given과 When 으로 어떤 결과가 나올지 작성 ( assertEquals(expected, actual) 등 을 이용해 expected 값과 actual 값 비교 )
ex) action 의 결과를 assert 로 검증
val context = ApplicationProvider.getApplicationContext<Context>()
// application 클래스 가져오기 , 생성자의 파라미터 Application 을 넘겨 Task
=========안드로이드 Context =========
developer: App 환경에 대한 다양한 정보를 담고있는 인터페이스 / 어떤 Activity, application 인가에 대해서 구별하는 정보가 context
- Application context : 어플리케이션 자체와 연동되는 것 / 앱의 lifecycle 이 지속되는 동안 동일한 객체 (즉 어플리케이션을 종료 후 다시 실행시킬때만 바뀌는 것) → getApplicationContext()
→ 항상 application 생명주기와 함께 한다. // 현재 activity의 context 뿐만 아니라 application의 lifeCycle에 해당하는 Context가 사용된다.
- Activity context : 액티비티와 연동된 것으로 그 액티비티를 파괴 시키고 다시 시작 시키면 activity context 도 바뀜 → this
→ Activity 가 destroy() 된 경우 사라질 수 있는 객체 / Context에 Intent를 통해 다른 activity를 띄우면 activity stack 이 쌓이게 된다.
============코틀린 람다식====================
** 함수는 변수에 할당될 수 있다. **
함수를 정의하면서 즉시 변수에 할당하면 변수 이름만 있어도 되기 때문에 함수에는 이름을 붙이지 않아도 된다.