问题标签 [android-fragmentscenario]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
267 浏览

android - 在 FragmentScenario 测试中膨胀类 com.google.android.material.tabs.TabLayout 时出错

我使用以下方法编写了一个测试FragmentScenario

我收到以下错误:

而且我只有在启动测试时才收到错误(应用程序有效)我试图将 androidTestImplementation 添加"com.google.android.material:material:1.0.0"到 androidTestImplementation 但它没有帮助

我能做些什么来解决这个问题?

0 投票
1 回答
1522 浏览

java - 使用 FragmentScenario 对 Dagger 片段进行单元测试

我正在尝试使用 Android Jetpack 导航组件和片段测试库来测试片段交互。我的应用程序使用 java + Dagger2 作为 DI。

为了测试导航,我创建了一个 JUnit 测试:

每当我运行测试时,我都会收到以下错误:

我怎样才能在那里注入我的片段?是否可以将 DaggerFragments 与 一起使用FragmentScenario

介绍片段

MyViewModel.java

0 投票
3 回答
755 浏览

android - 片段测试错误:android.view.InflateException: Binary XML file line #16: Binary XML file line #16: Error inflating class

我正在尝试按照以下说明测试片段:https ://developer.android.com/training/basics/fragments/testing

launchFragmentInContainer但是,从我的测试中调用时,我遇到了以下崩溃。

堆栈跟踪:

这是布局:

0 投票
2 回答
2821 浏览

testing - 找不到满足版本约束的“androidx.test:monitor”版本

我在运行片段测试时遇到此错误,这是一个启动 fragmentInContatiner 的简单测试:

这是造成此问题的我的 gradle 依赖项:

0 投票
2 回答
560 浏览

android-fragments - 在 UI 测试中的片段内显示对话框(对话框片段)

我正在为片段编写 UI 测试用例。我正在使用 launchFragmentInContainer 来启动独立于活动的片段。

场景是,单击按钮时,应该显示一个对话框片段,但是当我这样做时,屏幕上什么也没有出现。

这是我的主要片段

这是我的对话片段

这是我的测试

0 投票
1 回答
545 浏览

android - 使用 FragmentScenario 测试片段时如何测试与菜单的交互

我正在尝试使用 FragmentScenario 测试片段。这个片段有自己的菜单。操作栏上有一个添加图标,单击此菜单项会启动一个子片段,用户可以从中添加新项目。所以我正在尝试测试这种行为。但是,您可能知道,FragmentScenario 在 EmptyFragmentActivity 中启动片段,而不启动真正的宿主活动。由于操作栏不是片段布局的一部分,而是属于宿主活动,因此操作栏和菜单在测试期间甚至不可见。那么如何测试与菜单的交互呢?

我从官方文档中找到了这条信息:

如果您需要调用片段本身的方法,例如响应选项菜单中的选择,您可以通过实现 FragmentAction 安全地执行此操作:

但是,如何将正确的项目传递给 onOptionsItemSelected 回调?我试图将 addMenuItem 定义为成员变量并在 onCreateOptionsMenu 中对其进行初始化,但它返回 null。在测试期间似乎没有调用 onCreateOptionsMenu。所以我不知道如何测试用户与菜单的交互。

0 投票
1 回答
773 浏览

android - 如何使用 FragmentScenario 测试 DaggerFragment?

我有一个简单的Fragment像这样:

现在我想Fragment使用FragmentScenario

但每次我尝试测试它总是:

java.lang.IllegalArgumentException:没有为 <...SomeFragment> 找到注入器

如何正确运行测试?有人可以在这里帮助我吗?

0 投票
1 回答
378 浏览

android - 仅在 JVM 上测试 AndroidX 片段(不启动模拟器/设备)

我正在寻找一种无需在模拟器中启动片段即可对我的 AndroidX 片段进行单元测试的方法。Robolectric 允许我们为 JVM 中的活动运行单元测试,但我不确定 AndroidX 片段的等效方法是什么。

Google Android 最近推出了FragmentScenario,它允许我们启动和测试图形片段,但这种方法会在设备/模拟器上启动片段(类似于ActivityScenario)。Robolectric网站似乎支持这种发射片段的方式。

是否有可能——通过 Robolectric 或其他方式——纯粹在 JVM(无模拟器/设备)上运行 AndroidX 片段单元测试?

0 投票
0 回答
92 浏览

android - 片段中的后退按钮打开并关闭导航抽屉而不是返回

我有一个导航抽屉,它与抽屉图标一起工作非常好,但是,如果我从导航抽屉活动移动到我的任何片段,也会显示后退箭头,但是单击后退箭头导航抽屉打开,我只想设置我的单击后退按钮而不是打开抽屉时的操作。请帮助我纠正这个问题。

我的抽屉活动代码如下

在我的片段中

覆盖乐趣 onViewCreated(view: View, savedInstanceState: Bundle?) {

请让我知道如何在单击后退箭头而不是打开导航抽屉时返回上一个片段。

任何帮助将非常感激

0 投票
1 回答
557 浏览

android - FragmentScenario 和嵌套的 NavHostFragments 在 Instrumentation 测试中未按预期执行导航

我正在编写一个单一的活动应用程序,它使用 Android 的导航组件来帮助导航和片段场景进行仪器测试。在使用片段场景的仪器测试期间,在实际应用程序导航行为和被隔离测试的片段行为之间使用后退按钮时,我遇到了性能差异。

在我的 MainActivity 中,我有一个占据整个屏幕的主要 NavHostFragment。我使用导航主机片段来显示几个屏幕,包括一些主细节片段。每个主细节片段中都有另一个 NavHostFragment 以显示该功能的不同细节片段。此设置效果很好,并提供了我想要的行为。

为了完成主细节屏幕,我使用具有两个 FrameLayouts 的 ParentFragment 来为平板电脑和手机创建分屏,我以编程方式隐藏其中一个 FrameLayouts。创建 ParentFragment 时,它会检测它是否正在平板电脑或手机上运行,​​然后以编程方式将 NavHostFragment 添加到平板电脑的右侧框架布局中,并在手机隐藏右侧窗格中将 NavHostFragment 添加到左侧窗格中。NavHostFragments 还设置了不同的导航图,具体取决于它们是在平板电脑还是手机上运行(在手机上我们将片段显示为对话框,在平板电脑上我们将它们显示为常规片段)。

运行应用程序的 devDebug 版本时,一切正常。我可以使用主 NavHostFragment 导航到不同的主从屏幕。在我导航到主从屏幕后,嵌套的 NavHostFragment 将接管,我可以使用嵌套的 NavHostFragment 将屏幕导航进出主详细信息片段。

当用户尝试单击后退按钮,这将导致离开主详细信息屏幕并导航到上一个屏幕时,我们会向用户弹出一个对话框,询问他们是否真的要离开屏幕(这是他们输入大量数据)。为了实现这一点,我们注册了一个 onBackPressDispatcher 回调,以便我们知道何时按下后退按钮并在调用回调时导航到对话框。在 devDebug 版本中,用户首先位于导航图上的位置 A。如果当他们在位置 A 时单击后退按钮,那么我们会显示一个对话框片段,询问用户是否真的打算离开屏幕。相反,如果用户从位置 A 导航到位置 B 并单击返回,则他们首先导航回位置 A。如果他们再次单击返回按钮,调用后按调度程序回调,然后显示对话框片段,询问他们是否真的打算离开位置 A。因此,似乎后退按钮会影响嵌套 NavHostFragment 的后退堆栈,直到嵌套 NavHostFragment 只剩下一个片段. 当只剩下一个片段并单击后退按钮时,将调用 onBackPressDisapatcher 回调。这正是所需的行为。但是,当我使用 Fragment Scenario 编写 Instrumentation 测试时,我尝试测试 ParentFragment 我发现背压行为不同。在测试中,我使用 Fragment Scenario 启动 ParentFragment,然后运行测试,在嵌套的 NavHostFragment 中进行导航。当我单击后退按钮时,我希望嵌套的导航主机片段会弹出它的堆栈。然而,

我在 NavHostFragment 中设置了一些断点,似乎在运行测试时,NavHostFragment 没有设置为拦截返回点击。它的 enableOnBackPressed() 方法总是在将标志设置为 false 的情况下调用。

我不明白测试设置导致这种行为的原因是什么。我认为导航主机片段会自行拦截返回点击,直到它的后台堆栈上只剩下一个片段,然后才会调用 onBackPressDispatcher 回调。

我是否误解了我应该如何测试这个?为什么按下后退按钮时会调用 onBackPressDispatcher 的回调。