androidsdk 개발 단위 테스트 테스트
Android 에뮬레이터나 실제 컴퓨터에서 테스트 사례를 실행하는 것은 매우 느립니다. 앱을 빌드하고 배포하고 실행하는 데는 일반적으로 1분 이상이 소요됩니다. 이는 TDD(Test Driven Development) 패턴이 아닙니다. Robolectric은 더 나은 방법을 제공합니다.
아마도 junit 또는 testng를 사용하여 Java IDE에서 직접 테스트 케이스를 실행하려고 했지만 계속해서 java.lang.RuntimeException: Stub 예외가 발생했을 것입니다.
이 예외는 jdk에 Android 운영 환경이 없기 때문입니다. 이제 Android 단위 테스트 도구인 Robolectric은 Android SDK에서 jar 패키지를 시뮬레이션하고 JVM에서 직접 테스트 사례를 실행할 수 있으므로 시간이 크게 절약됩니다. Robolectric 테스트 사례는 다음과 같습니다.
// MyActivity에 대한 테스트 클래스 @RunWith(RobolectricTestRunner.class) public class MyActivityTest { @Test public void clickButton_shouldChangeResultsViewText() throws Exception { Activity Activity = Robolectric.buildActivity(MyActivity .class ).create().get(); 버튼 pressMeButton = (버튼) Activity.findViewById(R.id.press_me_button); TextView 결과 = (TextView) Activity.findViewById(R.id.results_text_view); ); String resultsText = results.getText().toString();assertThat(resultsText,equalTo("Testing Android Rocks!")) } }
Android 에뮬레이터 또는 실제 장치에서 테스트 사례를 실행하는 것은 매우 어렵습니다. 느린 . 앱을 빌드하고 배포하고 실행하는 데는 일반적으로 1분 이상이 소요됩니다. 이는 TDD(테스트 중심 개발) 모델이 아니며 Robolectric이 더 나은 방법을 제공합니다.
아마도 junit 또는 testng를 사용하여 Java IDE에서 직접 테스트 케이스를 실행하려고 했지만 계속해서 java.lang.RuntimeException: Stub 예외가 발생했을 것입니다.
이 예외는 jdk에 Android 운영 환경이 없기 때문입니다. 이제 Android 단위 테스트 도구인 Robolectric은 Android SDK에서 jar 패키지를 시뮬레이션하고 JVM에서 직접 테스트 사례를 실행할 수 있으므로 시간이 크게 절약됩니다.
Robolectric 테스트 예시는 다음과 같습니다:
// MyActivity에 대한 테스트 클래스
@RunWith(RobolectricTestRunner.class)
public class MyActivityTest {
@Test
public void clickButton_shouldChangeResultsViewText()가 예외를 발생시킵니다. {
Activity Activity = Robolectric.buildActivity(MyActivity.class).create().get();
< p>버튼 pressMeButton = (버튼) Activity.findViewById(R.id.press_me_button);TextView 결과 = (TextView) Activity.findViewById(R.id.results_text_view);
< p> pressMeButton.performClick();String resultsText = results.getText().toString();
assertThat(resultsText,equalTo("Android Rocks 테스트 중!"));
p>}
}
SDK, 리소스 및 네이티브 메소드 시뮬레이션
Robolectric은 컨트롤 디스플레이, 리소스 로딩 및 기타 여러 가지 작업을 처리할 수 있습니다. 실제 시스템에서 네이티브 C 기타 기능을 사용하여 구현된 것입니다. 따라서 Robolectric을 사용하여 실제 기계에서 대부분의 작업을 시뮬레이션할 수 있습니다. Robolectric의 소스 코드를 쉽게 얻을 수 있고 시뮬레이션 메커니즘을 직접 볼 수 있으므로 Robolectric을 사용하면 오류 조건과 일부 실제 센서 신호도 시뮬레이션할 수 있습니다.
시뮬레이터 없이 테스트 사례 실행
Robolectric을 사용하면 jvm을 사용하여 프로젝트 엔지니어링 또는 지속적 통합(hudson, jenkins와 같은 CI)에서 테스트 사례를 실행할 수 있으므로 생략됩니다. 패키징 및 설치 과정을 통해 테스트 케이스 실행 시간을 몇 분에서 몇 초로 단축합니다.
더 이상 Mock 프레임워크 없음
Mockito 또는 Android Mock과 같은 일부 Mock 프레임워크를 사용하면 Android 운영 환경을 시뮬레이션하고 Robolectric과 동일한 효과를 얻을 수 있습니다. 이는 효과적인 방법이지만 이 방법을 사용하여 작성된 테스트 케이스는 개발 코드의 구현에 반대되는 경우가 많습니다.
Robolectric의 테스트 스타일은 블랙박스 테스트에 더 편향되어 있습니다. Robolectric 스타일 테스트 사례는 Android 운영 환경 구현보다는 앱 성능에 더 중점을 두기 때문에 robolectric을 사용하여 작성된 테스트 사례가 더 많습니다. 효과적인. 물론 이 역시 테스터의 선호도에 따라 다릅니다. 원하는 경우 Robolectric과 모의 프레임워크를 동시에 사용할 수 있습니다.