在为下一个测试创建新的活动之前,Espresso不等到Activity被销毁

在为下一个测试创建新的活动之前,Espresso不等到Activity被销毁,第1张

概述情况在这里的官方文档:https://google.github.io/android-testing-support-library/docsules/index.html中,它表示:“Thisruleprovidesfunctionaltestingofasingleactivity.Theactivityundertestwillbelaunchedbeforeeachtestannotatedwith@Testand

情况

在这里的官方文档:https://google.github.io/android-testing-support-library/docs/rules/index.html中,它表示:

“This rule provIDes functional testing of a single activity. The
activity under test will be launched before each test annotated with
@Test and before any method annotated with @Before. It will be
terminated after the test is completed and all methods annotated with
@After are finished. The Activity under Test can be accessed during
your test by calling ActivityTestRule#getActivity().”

从技术上讲是,该活动正在终止.但是似乎并不确定何时会发生.例如.它不一定会在为下一个测试再次创建之前发生.

问题

在我的某些测试中,我需要依赖于每个测试之后,下一个测试开始之前调用的OnDestroy或OnDetach片段.我有一些需要清除和重新创建的听众.

如果在当前测试的OnResume之后调用前一个测试的onDestroy,则将清除回调,并且视图不会更新,并且测试失败.

如果根本没有调用先前测试的onDestroy,则当前测试的回调将引用错误的实例.同样,视图将不会更新,并且测试将失败.

问题

>这种行为是在设计时针对情况进行讨论的还是错误?到目前为止,我在文档中找不到此内容.
>处理此问题的最佳实践是什么?我怀疑其他人已经遇到了这个问题.

编辑:我现在解决了第2部分.请参阅下面的解决方法部分.但是,如果有人可以通过引用官方资源来回答第一部分,那么我很乐意接受该回答.这就是我在这里真正要问的.第二部分只是如果有人有一些想法的奖金.

证据

如果您希望看到此行为,则只需几分钟.使用如下活动创建一个新项目:

public class MainActivity extends AppCompatActivity {    @OverrIDe    protected voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentVIEw(R.layout.activity_main);    }    @OverrIDe    protected voID onResume() {        super.onResume();    }    @OverrIDe    protected voID onDestroy() {        super.onDestroy();    }}

和这样的测试类:

@RunWith(AndroIDJUnit4.class)@LargeTestpublic class EspressolifecycleTest {    @Rule    public ActivityTestRule<MainActivity> mActivityRule =        new ActivityTestRule<>(MainActivity.class);    @Test    public voID test1() {    }    @Test    public voID test2() {    }    @Test    public voID test3() {    }    @Test    public voID test4() {    }}

在OnResume和OnDestroy方法上设置断点,并在调试模式下运行测试套件.

进行几次此 *** 作,请注意,Activity生命周期方法的调用顺序不一致.例如.它可能连续调用两次OnResume,然后调用一次OnDestroy,然后再次调用OnResume,两次,然后两次OnDestroy,或者可以想到的任何其他组合.当然,它总是以至少一个OnResume开始.有时即使在最后也没有调用OnDestroy,但这很好.不好的是,由于这种不可预测的顺序,我的测试很不稳定.

我知道这可能是有意的,并且可能有一种简单的处理方法,我只是没有足够的幸运找到它.如果您知道这是什么,请在此处发布答案.事后看来,我不在乎我的问题有多愚蠢,我已经在这个问题上花了很多时间.这几乎总是简单的事情,所以我准备为答案感到尴尬.

解决方法

在onDestroy上使用onPause具有副作用,当我启动startActivityForResult时会被调用,但是在平板电脑模式下无需在后台片段中再次调用onResume.我正在探索使这项工作可行的方法,但目前尚无解决方案.

编辑:onPause最终遇到了相同的问题-这就是为什么我首先使用onDetach的部分原因.最终,在片段被销毁之前,我有时不想分离监听器.

这使我想到了下一个可行的想法!万岁!到目前为止,只有在特定的回调不存在的情况下,我才为正在调用的Activity创建一个回调.原来,这是一个坏主意.我这样做是为了将回调的数量限制为所需的确切数量.动机是合理的,但是实现需要清除所有这些回调.解决方案是在从片段调用时重新创建每个回调.如果它为null,请不要创建它,请始终创建它并替换之前的内容.现在完全不需要清除它们(AFAIK).

解决方法:

是个错误:http://b.android.com/201513

我用叉子工作:https://github.com/shazam/fork

总结

以上是内存溢出为你收集整理的在为下一个测试创建新的活动之前,Espresso不等到Activity被销毁全部内容,希望文章能够帮你解决在为下一个测试创建新的活动之前,Espresso不等到Activity被销毁所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/1095014.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存