相关疑难解决方法(0)

Espresso不会等到活动被破坏,然后在为下一次测试创建一个新活动之前

情况

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

"此规则提供单个活动的功能测试.在使用@Test注释的每个测试之前以及使用@Before注释的任何方法之前,将启动测试中的活动.它将在测试完成后终止,并且所有方法都使用@After注释完成后,测试下的活动可在测试期间通过调用ActivityTestRule#getActivity()访问".

技术上是的,活动正在终止.但似乎没有任何保证何时会发生这种情况.例如,它不一定会在为下一次测试再次创建之前发生.


问题

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

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

如果根本没有调用上一次测试的onDestroy,那么当前测试的回调将引用错误的实例.同样,视图将不会更新,测试将失败.


问题

  1. 这种行为是在设计中讨论的还是一个bug?到目前为止,我无法在文档中找到它.
  2. 处理这个问题的最佳做法是什么?我怀疑其他人都遇到过这个问题.

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


证据

如果你想看到这种行为,它只需要一些时间.使用如下所示的Activity创建一个新项目:

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

和这样的测试类:

@RunWith(AndroidJUnit4.class)
@LargeTest
public class EspressoLifecycleTest {

    @Rule
    public ActivityTestRule<MainActivity> mActivityRule =
        new ActivityTestRule<>(MainActivity.class);

    @Test
    public void test1() {
    }

    @Test
    public void …
Run Code Online (Sandbox Code Playgroud)

android android-espresso

9
推荐指数
1
解决办法
2426
查看次数

标签 统计

android ×1

android-espresso ×1