我正在写Espresso Test。这是测试用例
OnClick of Fab,该应用程序启动QuizActivity。
让我向你解释我的应用程序。
所以应用程序要求是 -
以下是我编码的方式 -
以下是我的测试
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
/* @Rule
public IntentsTestRule<MainActivity> intentsTestRule =
new IntentsTestRule<MainActivity>(MainActivity.class);
*/
@Rule
public ActivityTestRule<MainActivity> intentsTestRule =
new ActivityTestRule<MainActivity>(MainActivity.class,false,true);
@Test
public void fabTest(){
onView(withId(R.id.fab)).perform(click());
//Check if the text_question textview is displayed
onView(withId(R.id.text_question)).check(matches(isDisplayed()));
}
/* @Test
public void clickFloatingActionButton() {
onView(withId(R.id.fab))
.perform(click());
intended(hasComponent(new ComponentName(getTargetContext(), QuizActivity.class)));
}*/
}
我的方法是 -
在我进行测试后,我正在
java.lang.RuntimeException:无法启动意图Intent { act = android.intent.action.MAIN flg = 0x14000000 在45秒内cmp = my_package_name / .MainActivity}。也许是 主线程在合理的时间内没有闲置? 可能会有一个动画或不断重新粉刷的东西 屏幕。或者活动是在创建网络呼叫?见 threaddump日志。以上是事件队列的参考 在您的活动启动请求之前空闲是1505287862579,现在是 上次队列闲置时是:1505287862579。如果这些号码是 同样,你的活动可能会占用事件队列。
PS - 我关掉了所有的动画。我的代码中没有进度条。
还有一点需要注意,如果我在onCreate()方法中注释掉AsyncTask,AsyncTaskLoader,RecyclerView部分,那么测试就会通过。
我怀疑它可能是由于后台任务造成的。
有人遇到过类似问题吗?如果您知道解决方案,请告诉我。我两天都在苦苦挣扎。我在stackoverflow上搜索了类似的线程,但没有任何对我有用。
答案 0 :(得分:3)
我终于得到了解决方案!
实际上,罪魁祸首是我的适配器中的自定义视图。
Espresso一直等到AsyncTask
或AsyncTaskLoader
加载数据,但它看起来像自定义视图导致此问题,如异常中所述:
主线程在合理的时间内没有闲置? 可能会有一个动画或不断重新粉刷的东西 屏幕。
无论如何要克服这个问题,我需要做的是 -
“如果测试正在运行,请将自定义视图的可见性设置为GONE”
你会怎么做?
private AtomicBoolean isTestRunning;
public synchronized boolean isTestRunning () {
if (null == isTestRunning) {
boolean istest;
try {
Class.forName ("Full path of your TestName"); // for e.g. com.example.MyTest
istest = true;
} catch (ClassNotFoundException e) {
istest = false;
}
isTestRunning = new AtomicBoolean (istest);
}
return isRunningTest.get ();
}
现在我在Recyclerview
,
ViewHolder
public InsectHolder(View itemView)
{
super(itemView);
customView = (DangerLevelView) itemView.findViewById(R.id.danger_level_tv);
if(isRunningTest()) {
customView.setVisibility(View.GONE);
}
}
然后!你的考试将通过。
希望有人觉得它有用!
如果您对以下评论部分有任何疑问,请与我们联系!