目前,我掙扎了一點與單元測試框架......TouchUtils和ActivityInstrumentationTestCase2用戶事件單元測試的情況下不能正常工作
什麼,我試圖做
- 我需要模擬2點擊屏幕(100,100)和(400,400),持續時間較短。
- 我需要模擬屏幕上的longPressClick假設(200,200)
- 當用戶單擊本機代碼時,將運行並對位圖執行像素操作。
- 這個測試是要多對集點運行,用於分析系統
這裏的運行時性能的WHERE我堅持
- 我使用activityInstrumentationTestCase2和touchUtils爲用戶點擊事件。
- TouchUtils.longClickView(InstrumentationTestCase test,View v)正常工作;我能夠很快地檢測到長時間緊迫的事件,但是即使在我的UI線程中完成計算/渲染之前,測試用例也會完成;在這種情況下,我該如何停止測試退出?
- 我如何模擬2/3用戶點擊屏幕上的特定位置?導致TouchUtils.clickView(InstrumentationTestCase測試,視圖v)只會模擬用戶在屏幕中心點擊...如何正確地做到這一點?
這些我都試過的事情,似乎我錯過了一些東西:
- TouchUtils.longClickView(InstrumentationTestCase測試,視圖V)工作正常...創建longClickView ..即使我能夠通過引入ACTION_DOWN和ACTION_UP事件之間的時間間隔來在特定的屏幕位置創建longClickView()..請參閱附帶的代碼
- 我能夠在特定的屏幕位置實現用戶點擊事件,但我面對一個奇怪的問題..當我正在代替Motio時nEvent(100,100)來自測試案例。框架總是在Y事件中添加「-76」。不知道爲什麼會出現這種偏差...我通過將76添加到我的輸入數據(100,176) )暫時..有沒有人面臨類似的問題?
- 即使似乎這種方法的時間是非常關鍵的..因爲如果我在ACTION_DOWN和ACTION_UP之間放置更多的延遲,該事件被檢測爲longClickPress ...,如果我放少一點...「第二」單擊事件(ACTION_DOWN + ACTION_UP)被檢測爲DoubleTapEvent ..
應該是什麼ACTION_UP和ACTION_DOWN在正確的時間組合。對於單個用戶點擊事件模擬.. ????????
@Test
public void testClick(){
List<Points> pointSequence = new ArrayList<Points>();
Log.d(TAG, "FirClick Start Timing : " + SystemClock.uptimeMillis());
pointSequence.add(new Points(100f,176f));
pointSequence.add(new Points(100f,176f));
singleClickSimulation(pointSequence,false);
}
private void singleClickSimulation(List<Points> pointSequence, Boolean addDelay) {
long downTime = SystemClock.uptimeMillis();
long eventTime = SystemClock.uptimeMillis();
// NOTE : If I do not place this then the event is detected as doubleTap.
eventTime += 100;
Instrumentation inst = getInstrumentation();
MotionEvent event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_DOWN, pointSequence.get(0).getX(), pointSequence.get(0).getY(), 0);
inst.sendPointerSync(event);
//eventTime = SystemClock.uptimeMillis();
pointSequence.remove(0);
//This delay I have added just to test; whether there is enough time for pixel manipulation or not, actually it would be used only at the end of the run of all the test cases for single user click
if(addDelay){
eventTime = SystemClock.uptimeMillis() + 3000;
}
eventTime += 25;
event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_UP, pointSequence.get(0).getX(), pointSequence.get(0).getY(), 0);
inst.sendPointerSync(event);
pointSequence.remove(0);
}
以哪種方式執行雙擊事件? – Blackbelt 2012-10-09 16:14:00