Android Espresso测试用于在两个文本之间匹配文本内容
我已经创建了一个Android应用程序,它有登录编辑文本和密码编辑文本,条件是如果登录编辑文本和密码编辑文本中的两个内容都匹配,那么它的值为true或false。如何使用浓缩咖啡单元测试进行测试 我使用了下面的代码Android Espresso测试用于在两个文本之间匹配文本内容,android,unit-testing,android-espresso,Android,Unit Testing,Android Espresso,我已经创建了一个Android应用程序,它有登录编辑文本和密码编辑文本,条件是如果登录编辑文本和密码编辑文本中的两个内容都匹配,那么它的值为true或false。如何使用浓缩咖啡单元测试进行测试 我使用了下面的代码 @Test public void validLogin() { onView(withId(R.id.edtUserId)) .perform(typeText(mStringToBetyped), closeSoftKey
@Test
public void validLogin() {
onView(withId(R.id.edtUserId))
.perform(typeText(mStringToBetyped), closeSoftKeyboard());
onView(withId(R.id.edtPass))
.perform(typeText(mValidPass), closeSoftKeyboard());
onView(withId(R.id.loginBtn)).perform(click());
// onView(allOf(withId(R.id.edtUserId))).check(matches(withText(String.valueOf(allOf(withId(R.id.edtPass))))));
onView(withId(R.id.edtUserId)).check(matches(isEditTextValueEqualTo(R.id.edtPass, mStringToBetyped)));
/* onView(allOf(withId(R.id.edtUserId)))
.check(matches(withText(String.valueOf(withId(R.id.edtPass)))));*/
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Matcher<View> isEditTextValueEqualTo(final int viewId, final String content) {
return new TypeSafeMatcher<View>() {
@Override
public void describeTo(Description description) {
description.appendText("Match Edit Text Value with View ID Value : : " + content);
}
@Override
public boolean matchesSafely(View view) {
if (view != null) {
String editTextValue = ((EditText) view.findViewById(viewId)).getText().toString();
if (editTextValue.equalsIgnoreCase(content)) {
return true;
}
}
return false;
}
};
}
您的
isEditTextValueEqualTo
中的视图实际上是R.id.edtUserId
,因此视图.findViewById(R.id.edtPass)
将返回空值。
试着换一下这个
onView(withId(R.id.your_parent_view_that_has_edtPass)).check(matches(isEditTextValueEqualTo(R.id.edtPass, mStringToBetyped)));
如果您真的想使用自定义的匹配器
,那么这个怎么样
Matcher<View> isEditTextValueEqualTo(final int viewId1, final int viewId2, final String content) {
return new TypeSafeMatcher<View>() {
@Override
public void describeTo(Description description) {
description.appendText("Match Edit Text Value with View ID Value : : " + content);
}
@Override
public boolean matchesSafely(View view) {
if (view != null) {
String editTextValue1 = ((EditText) view.findViewById(viewId1)).getText().toString();
String editTextValue2 = ((EditText) view.findViewById(viewId2)).getText().toString();
if (editTextValue1.equalsIgnoreCase(editTextValue2)) {
return true;
}
}
return false;
}
};
}
您的isEditTextValueEqualTo
中的视图实际上是R.id.edtUserId
,因此视图.findViewById(R.id.edtPass)
将返回空值。
试着换一下这个
onView(withId(R.id.your_parent_view_that_has_edtPass)).check(matches(isEditTextValueEqualTo(R.id.edtPass, mStringToBetyped)));
如果您真的想使用自定义的匹配器
,那么这个怎么样
Matcher<View> isEditTextValueEqualTo(final int viewId1, final int viewId2, final String content) {
return new TypeSafeMatcher<View>() {
@Override
public void describeTo(Description description) {
description.appendText("Match Edit Text Value with View ID Value : : " + content);
}
@Override
public boolean matchesSafely(View view) {
if (view != null) {
String editTextValue1 = ((EditText) view.findViewById(viewId1)).getText().toString();
String editTextValue2 = ((EditText) view.findViewById(viewId2)).getText().toString();
if (editTextValue1.equalsIgnoreCase(editTextValue2)) {
return true;
}
}
return false;
}
};
}
以下是一个不使用自定义匹配器的解决方案:
onView(withId(R.id.parentViewId)).check(matches(allOf(
hasDescendant(allOf(withId(R.id.edtUserId), withText(mStringToBetyped))),
hasDescendant(allOf(withId(R.id.edtPass), withText(mStringToBetyped)))
)));
但是,由于您只比较两个视图中的文本,因此可以将Assert类用作:
以下是一个不使用自定义匹配器的解决方案:
onView(withId(R.id.parentViewId)).check(matches(allOf(
hasDescendant(allOf(withId(R.id.edtUserId), withText(mStringToBetyped))),
hasDescendant(allOf(withId(R.id.edtPass), withText(mStringToBetyped)))
)));
但是,由于您只比较两个视图中的文本,因此可以将Assert类用作:
我需要检查edtUser中的文本与edtPass中的文本匹配,从代码中我看到您想要检查R.id.edtPass
vsmStringToBetyped
中的文本,但是如果您想要检查两个编辑文本中的文本,只需使用Assert.equals(edittext1.getText().toString(),edittext2.getText().toString())
我刚意识到一件事。@Yatin你是说你的应用程序的功能是,如果用户名与密码匹配,用户可以成功登录(这就是你要测试的)?是@ADroid…正是我所需要的我需要检查edtUser内部的文本与edtPass内部的文本匹配奇怪,从您的代码中我看到您想要检查R.id.edtPass
vsmStringToBetyped
内部的文本,但是如果您想要检查两个编辑文本内部的文本,只需使用Assert.equals(edittext1.getText().toString()),edittext2.getText().toString()
我刚刚意识到一件事。@Yatin你是说你的应用程序的功能是,如果用户名与密码匹配,用户可以成功登录(这就是你要测试的)?是的@ADroid…正是我需要的这也是一种方法:)这也是一种方法:)