Android JUnit首选项测试

Android JUnit首选项测试,第1张

概述一个相当正常的场景: Android应用程序具有首选项活动,从ListPreference中选择一个选项会触发代码以更改该ListPreference的摘要文本.即:从颜色ListPreference中选择“绿色”会通过onPreferenceChange回调将ListPreference的摘要文本更改为“绿色”. 我希望能够使用Android JUnit测试来确认这些摘要更改都正确执行.但是,关 一个相当正常的场景: Android应用程序具有首选项活动,从ListPreference中选择一个选项会触发代码以更改该ListPreference的摘要文本.即:从颜色ListPreference中选择“绿色”会通过onPreferenceChange回调将ListPreference的摘要文本更改为“绿色”.

我希望能够使用AndroID JUnit测试来确认这些摘要更改都正确执行.但是,关于如何做到这一点的信息似乎很少.

我已尝试在ListPreference上使用setValue()的变体,无论是在测试线程中还是通过runOnUiThread(),都没有成功 – 这不会触发对onPreferenceChange()的调用.我在调用setValue()之后也尝试了getInstrumentation().waitForIDleSync(),但这也没有成功.

所以,我的问题是:这是怎么做到的?

谢谢!

解决方法 再过几个小时的工作就产生了这个有效的解决方案,但我很好奇其他人是否有更好的解决方案.这个代码的灵感来自于 this solution的类似问题,但这种情况在两个方面有所不同:

>它适用于AndroID JUnit,这意味着它需要通过runOnUiThread()调用ListPreference UI点击.
>它预计会有使用的偏好类别,这使得查找位置(相对于整个首选项列表)变得复杂.上述解决方案仅适用于没有偏好类别的情况.

此方法将接受特定ListPreference项的键,以及要单击的列表中项的位置.然后它将执行该列表项单击,其他代码将执行我正在寻找的检查.

请注意,这需要setActivityInitialtouchMode(true);在setUp()方法中调用getActivity()之前设置.

private voID clickListPreference(String _ListPreferenceKey,int _ListItemPos){    final String ListPreferenceKey = _ListPreferenceKey;    final int ListItemPos = _ListItemPos;    mActivity.runOnUiThread(            new Runnable() {                public voID run() {                    // get a handle to the particular ListPreference                    ListPreference ListPreference= (ListPreference) mActivity.findPreference(ListPreferenceKey);                    // bring up the dialog Box                      mActivity.getPreferenceScreen().onItemClick( null,null,getPreferenceposition(),0 );                     // click the requested item                    AlertDialog ListDialog = (AlertDialog) ListPreference.getDialog();                    ListVIEw ListVIEw = ListDialog.getListVIEw();                    ListVIEw.performItemClick(ListVIEw,ListItemPos,0);                }                /***                 * Finding a ListPreference is difficult when Preference CategorIEs are involved,* as the category header itself counts as a position in the preferences screen                 * List.                 *                  * This method iterates over the preference items insIDe preference categorIEs                 * to find the ListPreference that is wanted.                 *                  * @return The position of the ListPreference relative to the entire preferences screen List                 */                private int getPreferenceposition(){                    int counter = 0;                    PreferenceScreen screen = mActivity.getPreferenceScreen();                     // loop over categorIEs                    for (int i = 0; i < screen.getPreferenceCount(); i++){                        Preferencecategory cat = (Preferencecategory) screen.getPreference(i);                        counter++;                        // loop over category items                        for (int j = 0; j < cat.getPreferenceCount(); j++){                             if (cat.getPreference(j).getKey().contentEquals(ListPreferenceKey)){                                return counter;                            }                            counter++;                        }                    }                    return 0; // dID not match                }            }    );    getInstrumentation().waitForIDleSync();}
总结

以上是内存溢出为你收集整理的Android JUnit首选项测试全部内容,希望文章能够帮你解决Android JUnit首选项测试所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存