在mock中,每个方法都可以在同一个方法上调用两次



我正在用几个步骤进行UI测试

在第一步中,我需要模拟用户点击按钮时网络关闭的情况,并检查预期的行为,然后我需要模拟该用户再次点击按钮,但这次网络已经恢复

代码看起来有点像这个

@Test
fun dumbTest() {
mockkStatic(NetworkUtils::class)
every (NetworkUtils.isNetworkAvailable()) returns false
onView(withId(button_id)).perform(click())
onView(withId(text_id)).check(matches(withText("no internet)))
every (NetworkUtils.isNetworkAvailable()) returns true
onView(withId(button_id)).perform(click())
onView(withId(text_id)).check(matches(withText("has internet)))
}

实际的代码比这复杂得多,所以我不使用像returnsMany这样的构造

问题是:mock是否支持像我一样在同一个方法上多次调用every并得到不同的结果?

是的,这很有效。你可以简单地通过放置来验证它

assertThat("NetworkUtils.isNetworkAvailable() should be true",NetworkUtils.isNetworkAvailable())

就在每一行下面。

另一种100%确定的方法是首先用false模拟静态方法,调用unmockAll((重置所有内容并再次进行重新锁定,现在值设置为true。

最新更新