Robolectric 은 Gradle 이나 Bazel 프로젝트에 적용하기 가장 좋습니다.
안드로이드 스튜디오는 기본적으로 Gradle 빌드 시스템을 지원하기 때문에 Gradle 을 기준으로 설명하겠습니다.
Android Studio 에서 빌드하기(Gradle)
Robolectric 은 Android Gradle Plugin 3.2.1 버전 이상에서 잘 동작합니다.
먼저 앱 수준의 build.gradle 에 다음과 같이 추가해줍니다.
android {
// ...
testOptions {
unitTests {
includeAndroidResources = true
}
}
}
dependencies {
// ...
testImplementation 'org.robolectric:robolectric:4.3'
}
만약 안드로이드 스튜디오 버전이 3.3 이하라면 gradle.properties 파일에 아래 한 줄도 추가해줍니다.
android.enableUnitTestBinaryResources=true
이제 준비는 끝났습니다.
테스트 코드로 가셔서 클래스 수준에 @RunWith
과 함께 RobolectricTestRunner
을 적용해주면 됩니다.
@RunWith(RobolectricTestRunner.class)
public class SimpleTest {
}
테스트 작성해보기
예를 들어 WelcomActivity 에서 Login Button 을 누르면 LoginActivity 로 전환하는 어플리케이션이 있다고 가정하고, 이를 테스트 해보겠습니다.
이때 우리가 체크할 수 있는 것은 로그인 버튼을 눌렀을 때 올바른 인텐트로 전환이 이루어지는가 입니다.
Robolectric 은 어디까지나 Unit test framework 이기 때문에, LoginActivity 를 실제로 실행할 수는 없습니다. 그렇기 때문에 WelcomActivity 에서 올바른 인텐트로 전환을 시도하는 지만 확인하는 테스트를 작성해보겠습니다.
@RunWith(RobolectricTestRunner.class)
public class WelcomeActivityTest {
@Test
public void clickingLogin_shouldStartLoginActivity() {
WelcomeActivity activity = Robolectric.setupActivity(WelcomeActivity.class);
activity.findViewById(R.id.login).performClick();
Intent expectedIntent = new Intent(activity, LoginActivity.class);
Intent actual = shadowOf(RuntimeEnvironment.application)
.getNextStartedActivity();
assertEquals(expectedIntent.getComponent(), actual.getComponent());
}
}
Robolectric
은 안드로이드 프레임워크를 많은 Test API 와 함께 확장하였습니다.
Robolectric
은 추가적인 환경설정과 안드로이드 컴포넌트들의 내부적인 상태나 히스토리 등에 접근할 수 있게 해주는데, 이는 테스트에 몹시 유용합니다.
많은 Test API 는 각각의 안드로이드 클래스들을 확장하는데, 이는 shadowOf()
메소드를 통해 접근할 수 있습니다.
// retrieves all the toasts that have been displayed...
List<Toast> toasts = shadowOf(application).getShownToasts();
또한 Test API 는 shadow 된 특정 안드로이드 프레임워크 클래스에 한해서 static method
도 접근 가능합니다.
// simulates a new display being plugged into the device...
ShadowDisplay.addDisplay("xlarge-port");
Robolectric 의 Test API 에 대한 문서는 Robolectric plugin for Chrome 을 설치하거나 Android API Reference 를 방문하시면 되겠습니다.
'Android > Test' 카테고리의 다른 글
[Android Test] 4) Robolectric 테스트 환경 설정하기(Configuration) (0) | 2020.03.14 |
---|---|
[Android Test] 3) Robolectric API 와 AndroidX Test API 잘 알고 쓰기 (2) | 2020.03.13 |
[Android Test] 1) Robolectric 이란? (0) | 2020.03.11 |
[Android UI Test] 6) Espresso 를 활용한 WebView Test (0) | 2020.03.10 |
[Android UI Test] 5) Espresso 를 활용한 RecyclerView Test (0) | 2020.03.09 |