Dialog CTS fail-DialogTest.testSetDismissMessage fail原因和解决办法

Dialog CTS fail-DialogTest.testSetDismissMessage fail原因和解决办法

[DESCRIPTION]

在cts测试,整包测试过程中,概率性出现如下test case fail,单包测试必现
Compatibility Test Package: Android.app
android.app.cts.DialogTest
testSetDismissMessage fail junit.framework.AssertionFailedError at
android.app.cts.DialogTest.testSetDismissMessage(DialogTest.JAVA:843) (代码行号是基于Android L1的版本,如下是代码片段)
下面解释发生的原因和处理办法

[SOLUTION]

从 android.app.cts.DialogTest.testSetDismissMessage代码如下:
825 public void testSetDismissMessage() throws Throwable {826
mCalledCallback = false;827 startDialogActivity(DialogStubActivity.
TEST_DIALOG_WITHOUT_THEME);828 final Dialog d = mActivity.getDialog();829
830 final HandlerThread ht = new HandlerThread("DialogTest");831 ht.start
();832833 d.setDismissMessage(new MockDismissCancelHandler(d, ht.getLooper
()).obtainMessage(DISMISS,834 new OnDismissListener() {835 public void
onDismiss(DialogInterface dialog) {836 mCalledCallback = true;837 }838
}));839 assertTrue(d.isShowing());840 assertFalse(mCalledCallback);841
dialogDismiss(d);842 ht.join(100);843 assertTrue(mCalledCallback);844
assertFalse(d.isShowing());845 }
dialogDismiss(d); 这行代码只是在UI thread里sendDismissMessage到
MockDismissCancelHandler这个handler,然后waitForIdleSync(),
而Dismiss Message looper是在HandlerThread里面,若HandlerThread执行得稍微慢点(或UI thread执行得够快),Dismiss Message还未被执行,则onDismiss未被call back,mCalledCallback还是false,则test case fail
由此分析可见,这是Google设计CTS test case时,由于不同的thread执行不同步而可能会导致的问题
此类问题解决办法:
已确定为Google Issue:google在设计cts test code时有coding defect,MTK已提交patch,且google已apply到新版本的cts code中,详细可参考如下链接:
https://androidreview .
googlesource.com/84095


猜你喜欢

转载自blog.csdn.net/sandform/article/details/52037695