我有一个ProgressBar
,它会随着用户逐步执行一系列操作而填写。
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleHorizontal"
android:indeterminate="false"
android:max="100"
android:progress="50"
... />
我想用JUnit和Espresso编写一个测试,该测试在不同步骤中声明progress
属性的值。像这样...
onView(withId(R.id.progressBar)).check(matches(withProgress(50)));
似乎没有类似于withProgress
方法的东西。断言进度的方法是什么?
答案 0 :(得分:0)
Espresso似乎不允许使用check
ViewInteraction
的progress属性。但是,可以直接从视图恢复进度条视图并使用assertThat
声明其值。
@Test
public void ExampleAssertProgressBar(){
ProgressBar progressBar = activity.getActivity().findViewById(R.id.progressBar);
int progress = progressBar.getProgress();
assertThat(progress, equalTo(50));
}
因为这非常简单,所以我认为这是可行的方法。
答案 1 :(得分:0)
如果有人需要其他示例说明或需要声明MaxProgress,颜色和Progress。我的答案是在Kotlin中,我从Java答案:https://stackoverflow.com/a/58964772/11793333中分叉出来。
fun matchesProgressBarTintAndMaxProgress(
expectedResourceId: ColorStateList?,
maxExpected: Int,
progressExpected: Int?
): Matcher<View?>? {
return object : BoundedMatcher<View?, View>(View::class.java) {
var actualColor: ColorStateList? = null
var actualMaxProgress = 0
var actualProgress = 0
var message: String? = null
override fun matchesSafely(item: View): Boolean {
actualColor = (item as ProgressBar).progressTintList
actualMaxProgress = item.max
actualProgress = item.progress
return actualColor == expectedResourceId && actualMaxProgress == maxExpected && actualProgress == progressExpected
}
override fun describeTo(description: Description) {
message = ("Tint color match: ${actualColor == expectedResourceId} "
+ "MaxProgress match: ${actualMaxProgress == maxExpected} "
+ "ActualProgress match: ${actualProgress == progressExpected}")
description.appendText(message)
}
}
}
要使用它:
onView(withId(R.id.progressBar)).check(
matches(
matchesProgressBarTintAndMaxProgress(
ColorStateList.valueOf(
ContextCompat.getColor(
context,
R.color.red
)
),
100,
50
)
)
)