是否只有隐藏 Toast 后才能完成测试?
Is it possilble to finish test only after Toast was hide?
这是我的 Espresso 测试:
@RunWith(AndroidJUnit4::class)
class AddTraderActivityNetworkTest {
@Rule
@JvmField
var addTraderIntentTestRule: IntentsTestRule<AddTraderActivity> = IntentsTestRule(AddTraderActivity::class.java)
@Before
fun setup() {
mockServer = MockWebServer()
mockServer.start(8081)
}
@Test
fun buttonStart_click_serverError_showToast() {
mockServer.enqueue(MockResponse()
.setResponseCode(500))
onView(withId(R.id.baseTextInputEditText))
.perform(typeText(BASE_TEST))
onView(withId(R.id.quoteTextInputEditText))
.perform(typeText(QUOTE_TEST))
onView(withId(R.id.startButton))
.perform(click())
onView(withText(R.string.server_error)).inRoot(ToastMatcher())
.check(matches(isDisplayed()))
}
测试buttonStart_click_serverError_showToast
成功通过。当我收到网络服务器错误时,它(测试)检查是否显示 Toast。不错
但问题是测试在隐藏 Toast 之前完成。
但是我只需要在 buttonStart_click_serverError_showToast
的 toast 被隐藏之后才开始另一个测试。
我该怎么做?
这是我的解决方案:
@RunWith(AndroidJUnit4::class)
class AddTraderActivityNetworkTest {
private val context = InstrumentationRegistry.getInstrumentation().getContext()
private lateinit var mockServer: MockWebServer
private val TAG = AddTraderActivityNetworkTest::class.java.name
@Rule
@JvmField
var addTraderIntentTestRule: IntentsTestRule<AddTraderActivity> = IntentsTestRule(AddTraderActivity::class.java)
@Before
fun setup() {
mockServer = MockWebServer()
mockServer.start(8081)
}
@Test
fun buttonStart_click_clientError_showToast() {
//stub response
mockServer.enqueue(MockResponse()
.setResponseCode(400))
onView(withId(R.id.baseTextInputEditText))
.perform(typeText(BASE_TEST))
onView(withId(R.id.quoteTextInputEditText))
.perform(typeText(QUOTE_TEST))
onView(withId(R.id.startButton))
.perform(click())
onView(withText(R.string.client_error)).inRoot(ToastMatcher())
.check(matches(isDisplayed()))
Thread.sleep(ToastUtil.LONG_DELAY_MILLS)
}
class ToastUtil {
companion object {
const val LONG_DELAY_MILLS= 3500L
const val SHORT_DELAY_MILLS = 2000L
}
}
我用的是 3500 Mills 的睡眠
在测试结束时添加睡眠命令,以便浏览器有时间在完成测试之前处理 hide()。三秒应该可以。
@Test
fun buttonStart_click_serverError_showToast() {
Thread.sleep(ToastUtil.LONG_DELAY)
// stub response
mockServer.enqueue(MockResponse()
.setResponseCode(500))
onView(withId(R.id.baseTextInputEditText))
.perform(typeText(BASE_TEST))
onView(withId(R.id.quoteTextInputEditText))
.perform(typeText(QUOTE_TEST))
onView(withId(R.id.startButton))
.perform(click())
onView(withText(R.string.server_error)).inRoot(ToastMatcher())
.check(matches(isDisplayed()))
Thread.sleep(3000)
}
这是我的 Espresso 测试:
@RunWith(AndroidJUnit4::class)
class AddTraderActivityNetworkTest {
@Rule
@JvmField
var addTraderIntentTestRule: IntentsTestRule<AddTraderActivity> = IntentsTestRule(AddTraderActivity::class.java)
@Before
fun setup() {
mockServer = MockWebServer()
mockServer.start(8081)
}
@Test
fun buttonStart_click_serverError_showToast() {
mockServer.enqueue(MockResponse()
.setResponseCode(500))
onView(withId(R.id.baseTextInputEditText))
.perform(typeText(BASE_TEST))
onView(withId(R.id.quoteTextInputEditText))
.perform(typeText(QUOTE_TEST))
onView(withId(R.id.startButton))
.perform(click())
onView(withText(R.string.server_error)).inRoot(ToastMatcher())
.check(matches(isDisplayed()))
}
测试buttonStart_click_serverError_showToast
成功通过。当我收到网络服务器错误时,它(测试)检查是否显示 Toast。不错
但问题是测试在隐藏 Toast 之前完成。
但是我只需要在 buttonStart_click_serverError_showToast
的 toast 被隐藏之后才开始另一个测试。
我该怎么做?
这是我的解决方案:
@RunWith(AndroidJUnit4::class)
class AddTraderActivityNetworkTest {
private val context = InstrumentationRegistry.getInstrumentation().getContext()
private lateinit var mockServer: MockWebServer
private val TAG = AddTraderActivityNetworkTest::class.java.name
@Rule
@JvmField
var addTraderIntentTestRule: IntentsTestRule<AddTraderActivity> = IntentsTestRule(AddTraderActivity::class.java)
@Before
fun setup() {
mockServer = MockWebServer()
mockServer.start(8081)
}
@Test
fun buttonStart_click_clientError_showToast() {
//stub response
mockServer.enqueue(MockResponse()
.setResponseCode(400))
onView(withId(R.id.baseTextInputEditText))
.perform(typeText(BASE_TEST))
onView(withId(R.id.quoteTextInputEditText))
.perform(typeText(QUOTE_TEST))
onView(withId(R.id.startButton))
.perform(click())
onView(withText(R.string.client_error)).inRoot(ToastMatcher())
.check(matches(isDisplayed()))
Thread.sleep(ToastUtil.LONG_DELAY_MILLS)
}
class ToastUtil {
companion object {
const val LONG_DELAY_MILLS= 3500L
const val SHORT_DELAY_MILLS = 2000L
}
}
我用的是 3500 Mills 的睡眠
在测试结束时添加睡眠命令,以便浏览器有时间在完成测试之前处理 hide()。三秒应该可以。
@Test
fun buttonStart_click_serverError_showToast() {
Thread.sleep(ToastUtil.LONG_DELAY)
// stub response
mockServer.enqueue(MockResponse()
.setResponseCode(500))
onView(withId(R.id.baseTextInputEditText))
.perform(typeText(BASE_TEST))
onView(withId(R.id.quoteTextInputEditText))
.perform(typeText(QUOTE_TEST))
onView(withId(R.id.startButton))
.perform(click())
onView(withText(R.string.server_error)).inRoot(ToastMatcher())
.check(matches(isDisplayed()))
Thread.sleep(3000)
}