Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 浓缩咖啡在参数化测试中第二次迭代时不启动相同的活动_Android_Android Espresso - Fatal编程技术网

Android 浓缩咖啡在参数化测试中第二次迭代时不启动相同的活动

Android 浓缩咖啡在参数化测试中第二次迭代时不启动相同的活动,android,android-espresso,Android,Android Espresso,当使用参数化测试时,浓缩咖啡在第一次测试之后运行测试的方式是否有所不同 我有两个参数,如果我自己做它们(如果我注释其中一个参数,并且只有一个参数),或者如果我颠倒第一个参数总是通过的顺序,它们都运行得很好 但由于某种原因,当我把它们放在一起运行时,第二个总是失败。事实上,有一次它没有失败。没有任何改变,它只工作了一次。但只有一次。所以可能有一个bug,但我倾向于认为这是我正在做(或没有做)的事情 实际出现的问题是,在测试的中途(根据调试器),字段被设置为null。但是我似乎不知道怎么做或者为什么

当使用参数化测试时,浓缩咖啡在第一次测试之后运行测试的方式是否有所不同

我有两个参数,如果我自己做它们(如果我注释其中一个参数,并且只有一个参数),或者如果我颠倒第一个参数总是通过的顺序,它们都运行得很好

但由于某种原因,当我把它们放在一起运行时,第二个总是失败。事实上,有一次它没有失败。没有任何改变,它只工作了一次。但只有一次。所以可能有一个bug,但我倾向于认为这是我正在做(或没有做)的事情

实际出现的问题是,在测试的中途(根据调试器),字段被设置为null。但是我似乎不知道怎么做或者为什么,特别是因为它在第一次测试中没有发生。所以我在代码中找不到任何明显的东西,但我也看不出浓缩咖啡有什么不同。有什么想法吗

我遵循了调试器,它向我证明了值已设置,然后由于某种原因,当它暂停当前活动以启动对话框时,值被设置为null。但只有在第二次测试中。在第一次测试中,在完全相同的情况下,它不会这样做。为什么?

编辑: 好的,我已经进一步缩小了范围,但仍然不确定它为什么要这样做。这有点奇怪,但我通过调试器发现,第一个测试中的ondeach在第二个测试的onResume之后被称为。为什么会这样

无论如何,这就是我遇到问题的原因,因为使值为null的代码源自OnDetch,而该值最初是从onResume中的方法设置的。这就解释了。但为什么会这样



此处记录的问题:

好,我找到了解决方案。由于在当前测试中,上一个测试中的onDestroy在onResume之后被调用,因此我将onDestroy中清除侦听器的代码移动到onResume的开头。现在,当onResume中的其他代码运行时,它不会因为onDestroy的错误计时而无效。监听器是通过存储库访问的,该存储库始终处于活动状态

希望这一切对任何阅读的人都有意义,以防他们面临类似的问题。到目前为止,我还没有注意到这种解决方法的任何副作用。所有的测试都通过了,实际的应用程序在手动运行时也能正常工作

编辑:此解决方案现在导致问题,因此我不得不接受我的答案。原因是,当我调用另一个活动获取结果时,当它返回时,侦听器在onResume中被杀死。在这种情况下,onDestroy尚未终止,因此不会导致此问题

编辑2和当前解决方案:这个问题对于读者来说有点难测试,所以我创建了一个测试应用程序和一个新的更简单的问题。我找到了一个可行的解决方案,我在这篇文章中解释过:


我相信在阅读一些元问答的基础上,我更倾向于不要删除问题,所以我将这个问题留在这里。

好的,我找到了一个解决方案。由于在当前测试中,上一个测试中的onDestroy在onResume之后被调用,因此我将onDestroy中清除侦听器的代码移动到onResume的开头。现在,当onResume中的其他代码运行时,它不会因为onDestroy的错误计时而无效。监听器是通过存储库访问的,该存储库始终处于活动状态

希望这一切对任何阅读的人都有意义,以防他们面临类似的问题。到目前为止,我还没有注意到这种解决方法的任何副作用。所有的测试都通过了,实际的应用程序在手动运行时也能正常工作

编辑:此解决方案现在导致问题,因此我不得不接受我的答案。原因是,当我调用另一个活动获取结果时,当它返回时,侦听器在onResume中被杀死。在这种情况下,onDestroy尚未终止,因此不会导致此问题

编辑2和当前解决方案:这个问题对于读者来说有点难测试,所以我创建了一个测试应用程序和一个新的更简单的问题。我找到了一个可行的解决方案,我在这篇文章中解释过:


我相信在阅读一些元问答的基础上,我更倾向于不要删除问题,所以我就把这个问题留在这里。

你能分享你的代码吗?考试结束后,你是否会进行清理,以便第二次考试开始时的状态与第一次考试相同?我真的想得到一个更一般的答案。比如第二次测试可能会有什么不同。只是一些关于寻找什么的想法。至于清理,是的,我已经做了一切,似乎它可能会影响。但问题发生在测试期间(而不是在测试开始时),因为某种原因,它将值设置为null。在测试的第一部分,它成功地使用了这个值,然后在没有的情况下,Espresso将该值设置为null,第二部分失败。在测试的第一次运行中,它并没有将值设置为null,只是在第二次运行时才设置为null。我只是发现了一些非常有趣的东西。如果我运行类中的所有测试,那么第二次失败的测试两次都失败。所以,我想我肯定没有做清理工作。不过,我不知道还有什么需要清理的。我之前尝试过调查这个activityTestRule会发生什么,但除了这一部分关于为多个任务设置标志的内容外,我没有找到任何其他内容。然而,这并没有起到任何作用(我使用了add,所以它将保留new_任务标志)。我还试着明确地设置它们。没有看到代码,恐怕很难说出问题出在哪里。是的,没有代码,我意识到这是一个很难回答的问题。但是,如果有人之前经历过这种情况,他们可能会有一些建议。你能分享你的代码吗?在测试后进行清理,以便第二次测试以与测试相同的状态开始