3

我正在尝试测试我的活动(HomeActivity),该活动具有基于 NineOldAndroids 库和 Espresso 的重复动画。我按照此处所述关闭了系统动画,但这没有帮助,并且出现错误(见下文)。唯一有用的是手动删除动画。所以问题是我是否需要手动关闭动画(使用 BuildConfig 似乎很轻松)或者我做错了什么?先感谢您!

 java.lang.RuntimeException: Could not launch intent Intent {
 act=android.intent.action.MAIN flg=0x14000000
 cmp=com.package.en/com.package.ui.HomeActivity } within 45 seconds.
 Perhaps the main thread has not gone idle within a reasonable amount
 of time? There could be an animation or something constantly
 repainting the screen. Or the activity is doing network calls on
 creation? See the threaddump logs. For your reference the last time
 the event queue was idle before your activity launch request was
 1392052899081 and and now the last time the queue went idle was:
 1392052899081. If these numbers are the same your activity might be hogging the event 
 queue.
4

2 回答 2

3

修复问题:

    @Before
    public void setUp() throws Exception {
        super.setUp();
        injectInstrumentation(InstrumentationRegistry.getInstrumentation());
        Intent intent = getIntent();
        if (intent == null) {
            intent = new Intent();
        }
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
        setActivityIntent(intent);
    }

    @SuppressLint("NewApi")
    @Override
    public T getActivity() {
        final T activity = super.getActivity();
        activity.overridePendingTransition(0, 0);
        return activity;
    }

于 2016-04-15T10:42:08.453 回答
1

我对 9olddroids 了解不多,但是对于 Espresso,您应该禁用动画以使您的测试变得可靠,您可能已经这样做了。

所以也许这是通过添加一些禁用动画的代码来增加您的应用程序“可测试性”的情况。例如,您的活动可能有一个禁用动画的方法,例如:

 public void disableAnimations() {
     this.mAnimationsEnabled = false;
 }

在每个动画之前,您检查它们是否已启用。测试开始后,您将禁用动画:

 public void setUp () {
    super.setUp();
     YourActivity activity = getActivity();
     activity.disableAnimations();
 }

 public void testXYZ() {
     // your test code
 }

我希望这会奏效,因为 9OldDroids 将停止干扰 Espresso

于 2014-02-15T17:17:33.447 回答