Android UI 테스트 코드
Espresso 소개
가져오기
gradle에 다음 코드 추가
최신 버전은 공식 사이트을 참조하십시오.dependencies {
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'
}
새 로그인 화면의 프로세스 테스트
id와 비밀번호를 입력하고 버튼을 누르면 다음 화면으로 전환하는 프로그램을 고려합니다.
등록이 실패하면 오류 메시지가 표시됩니다.
SignUp 실패 시 테스트
@Test
public void checkErrorMessage() {
onView(withId(R.id.user_id)).perform(replaceText(""));
onView(withId(R.id.password)).perform(replaceText(password), closeSoftKeyboard());
onView(withId(R.id.signup_button)).perform(click());
onView(withId(R.id.error_message)).check(matches(withText("ユーザーIDを入力してください。")));
}
SignUp 성공 시 테스트
@Test
public void checkSignUp() {
onView(withId(R.id.user_id)).perform(replaceText(userId));
onView(withId(R.id.password)).perform(replaceText(password), closeSoftKeyboard());
onView(withId(R.id.signup_button)).perform(click());
onView(withId(R.id.hello_world)).check(matches(withText("Hello World, " + userId + "!!")));
}
CustomMatcher
방금 위의 withText는 화면의 텍스트 값을 검사했고, 스스로 맞춤형Matcher를 만들 수도 있습니다.
예를 들어 TextView 색상을 검사하는 Custom Matcher를 실현하려면 matches Safely 방법과 describeTo 방법을 다시 써야 한다.
matches Safely로 독자적인 Matcher를 정의하고 describeTo로 로그의 표시를 정의합니다.private static Matcher<Object> withColor(final Matcher<Integer> integerMatcher) {
return new BoundedMatcher<Object, TextView>(TextView.class) {
@Override
public boolean matchesSafely(TextView textView) {
return integerMatcher.matches(textView.getCurrentTextColor());
}
@Override
public void describeTo(Description description) {
description.appendText("with resource color : ");
integerMatcher.describeTo(description);
}
};
}
onView(withId(R.id.error_message))
.check(matches(withColor(is(ContextCompat.getColor(activity, android.R.color.holo_red_light)))));
Idling Resource
어떤 조건을 만족시킨 후 동작을 진행하다.
애니메이션이 끝나면 스크롤이 시작됩니다.5초 후 버튼을 누릅니다.잠깐만요.
implements 클래스에서 구현된 Idling Resource입니다.
다음은 hoge초 후 동작 처리를 하는 상황입니다.public class ElapsedTimeIdlingResource implements IdlingResource {
private final long startTime;
private final long waitingTime;
private IdlingResource.ResourceCallback resourceCallback;
public ElapsedTimeIdlingResource(long waitingTime) {
this.startTime = System.currentTimeMillis();
this.waitingTime = waitingTime;
}
@Override
public String getName() {
return ElapsedTimeIdlingResource.class.getName() + ":" + waitingTime;
}
@Override
public boolean isIdleNow() {
long elapsed = System.currentTimeMillis() - startTime;
boolean idle = (elapsed >= waitingTime);
if (idle) {
resourceCallback.onTransitionToIdle();
}
return idle;
}
@Override
public void registerIdleTransitionCallback(IdlingResource.ResourceCallback resourceCallback) {
this.resourceCallback = resourceCallback;
}
}
@Test
public void checkErrorMessage() {
// Now we wait 8 seconds for some reason
IdlingResource idlingResource = new ElapsedTimeIdlingResource(DateUtils.SECOND_IN_MILLIS * 8);
Espresso.registerIdlingResources(idlingResource);
onView(withId(R.id.error_message)).check(matches(withColor(is(ContextCompat.getColor(activity, android.R.color.holo_red_light)))));
// Clean up
Espresso.unregisterIdlingResources(idlingResource);
}
고찰하다.
Espresso의 문법은 보기에 매우 간단하고 코드의 양도 매우 적으며 매우 좋다.
이 기사의 코드는 GiitHub에 EspressoDemo라는 이름으로 공개됐으니 꼭 보십시오.
말은 그렇지만 저는 개인적으로 안드로이드 앱MapMe과 넷플릭스의 영화 평론 사이트WhatchaSee를 운영하고 있습니다.
한번 봐주시면 감사하겠습니다.
Reference
이 문제에 관하여(Android UI 테스트 코드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/takusemba/items/efb256775de301e5c7be
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
dependencies {
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'
}
id와 비밀번호를 입력하고 버튼을 누르면 다음 화면으로 전환하는 프로그램을 고려합니다.
등록이 실패하면 오류 메시지가 표시됩니다.
SignUp 실패 시 테스트
@Test
public void checkErrorMessage() {
onView(withId(R.id.user_id)).perform(replaceText(""));
onView(withId(R.id.password)).perform(replaceText(password), closeSoftKeyboard());
onView(withId(R.id.signup_button)).perform(click());
onView(withId(R.id.error_message)).check(matches(withText("ユーザーIDを入力してください。")));
}
SignUp 성공 시 테스트
@Test
public void checkSignUp() {
onView(withId(R.id.user_id)).perform(replaceText(userId));
onView(withId(R.id.password)).perform(replaceText(password), closeSoftKeyboard());
onView(withId(R.id.signup_button)).perform(click());
onView(withId(R.id.hello_world)).check(matches(withText("Hello World, " + userId + "!!")));
}
CustomMatcher
방금 위의 withText는 화면의 텍스트 값을 검사했고, 스스로 맞춤형Matcher를 만들 수도 있습니다.
예를 들어 TextView 색상을 검사하는 Custom Matcher를 실현하려면 matches Safely 방법과 describeTo 방법을 다시 써야 한다.
matches Safely로 독자적인 Matcher를 정의하고 describeTo로 로그의 표시를 정의합니다.private static Matcher<Object> withColor(final Matcher<Integer> integerMatcher) {
return new BoundedMatcher<Object, TextView>(TextView.class) {
@Override
public boolean matchesSafely(TextView textView) {
return integerMatcher.matches(textView.getCurrentTextColor());
}
@Override
public void describeTo(Description description) {
description.appendText("with resource color : ");
integerMatcher.describeTo(description);
}
};
}
onView(withId(R.id.error_message))
.check(matches(withColor(is(ContextCompat.getColor(activity, android.R.color.holo_red_light)))));
Idling Resource
어떤 조건을 만족시킨 후 동작을 진행하다.
애니메이션이 끝나면 스크롤이 시작됩니다.5초 후 버튼을 누릅니다.잠깐만요.
implements 클래스에서 구현된 Idling Resource입니다.
다음은 hoge초 후 동작 처리를 하는 상황입니다.public class ElapsedTimeIdlingResource implements IdlingResource {
private final long startTime;
private final long waitingTime;
private IdlingResource.ResourceCallback resourceCallback;
public ElapsedTimeIdlingResource(long waitingTime) {
this.startTime = System.currentTimeMillis();
this.waitingTime = waitingTime;
}
@Override
public String getName() {
return ElapsedTimeIdlingResource.class.getName() + ":" + waitingTime;
}
@Override
public boolean isIdleNow() {
long elapsed = System.currentTimeMillis() - startTime;
boolean idle = (elapsed >= waitingTime);
if (idle) {
resourceCallback.onTransitionToIdle();
}
return idle;
}
@Override
public void registerIdleTransitionCallback(IdlingResource.ResourceCallback resourceCallback) {
this.resourceCallback = resourceCallback;
}
}
@Test
public void checkErrorMessage() {
// Now we wait 8 seconds for some reason
IdlingResource idlingResource = new ElapsedTimeIdlingResource(DateUtils.SECOND_IN_MILLIS * 8);
Espresso.registerIdlingResources(idlingResource);
onView(withId(R.id.error_message)).check(matches(withColor(is(ContextCompat.getColor(activity, android.R.color.holo_red_light)))));
// Clean up
Espresso.unregisterIdlingResources(idlingResource);
}
고찰하다.
Espresso의 문법은 보기에 매우 간단하고 코드의 양도 매우 적으며 매우 좋다.
이 기사의 코드는 GiitHub에 EspressoDemo라는 이름으로 공개됐으니 꼭 보십시오.
말은 그렇지만 저는 개인적으로 안드로이드 앱MapMe과 넷플릭스의 영화 평론 사이트WhatchaSee를 운영하고 있습니다.
한번 봐주시면 감사하겠습니다.
Reference
이 문제에 관하여(Android UI 테스트 코드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/takusemba/items/efb256775de301e5c7be
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
private static Matcher<Object> withColor(final Matcher<Integer> integerMatcher) {
return new BoundedMatcher<Object, TextView>(TextView.class) {
@Override
public boolean matchesSafely(TextView textView) {
return integerMatcher.matches(textView.getCurrentTextColor());
}
@Override
public void describeTo(Description description) {
description.appendText("with resource color : ");
integerMatcher.describeTo(description);
}
};
}
onView(withId(R.id.error_message))
.check(matches(withColor(is(ContextCompat.getColor(activity, android.R.color.holo_red_light)))));
어떤 조건을 만족시킨 후 동작을 진행하다.
애니메이션이 끝나면 스크롤이 시작됩니다.5초 후 버튼을 누릅니다.잠깐만요.
implements 클래스에서 구현된 Idling Resource입니다.
다음은 hoge초 후 동작 처리를 하는 상황입니다.
public class ElapsedTimeIdlingResource implements IdlingResource {
private final long startTime;
private final long waitingTime;
private IdlingResource.ResourceCallback resourceCallback;
public ElapsedTimeIdlingResource(long waitingTime) {
this.startTime = System.currentTimeMillis();
this.waitingTime = waitingTime;
}
@Override
public String getName() {
return ElapsedTimeIdlingResource.class.getName() + ":" + waitingTime;
}
@Override
public boolean isIdleNow() {
long elapsed = System.currentTimeMillis() - startTime;
boolean idle = (elapsed >= waitingTime);
if (idle) {
resourceCallback.onTransitionToIdle();
}
return idle;
}
@Override
public void registerIdleTransitionCallback(IdlingResource.ResourceCallback resourceCallback) {
this.resourceCallback = resourceCallback;
}
}
@Test
public void checkErrorMessage() {
// Now we wait 8 seconds for some reason
IdlingResource idlingResource = new ElapsedTimeIdlingResource(DateUtils.SECOND_IN_MILLIS * 8);
Espresso.registerIdlingResources(idlingResource);
onView(withId(R.id.error_message)).check(matches(withColor(is(ContextCompat.getColor(activity, android.R.color.holo_red_light)))));
// Clean up
Espresso.unregisterIdlingResources(idlingResource);
}
고찰하다.
Espresso의 문법은 보기에 매우 간단하고 코드의 양도 매우 적으며 매우 좋다.
이 기사의 코드는 GiitHub에 EspressoDemo라는 이름으로 공개됐으니 꼭 보십시오.
말은 그렇지만 저는 개인적으로 안드로이드 앱MapMe과 넷플릭스의 영화 평론 사이트WhatchaSee를 운영하고 있습니다.
한번 봐주시면 감사하겠습니다.
Reference
이 문제에 관하여(Android UI 테스트 코드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/takusemba/items/efb256775de301e5c7be
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Android UI 테스트 코드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/takusemba/items/efb256775de301e5c7be텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)