2011-06-01 28 views
2

我在爲Android項目編寫JUnit測試腳本。我打算測試的是一個活動的選項菜單項(您知道,通過按菜單鍵調用該菜單)。如何從活動獲取菜單引用

但是,在我們的項目中,菜單是從一些互聯網內容動態生成的。 最重要的是,Menu對象是我們活動對象中的一個私有變量。

現在我的問題是,我如何驗證這個菜單(驗證它的菜單項數量,每個項目上的文本等)。

回答

0

您通常會這樣做的方式是在java中使成員包爲私有(無限定符),然後讓您的junit測試與託管菜單的類(可能是您的活動)在同一個java包中。

單元測試不必通過物理上共處於同一個包文件夾中,只要兩個類在運行時具有相同的包。

0

您將使用PhoneWindow獲得對菜單對象的引用。它有一個名爲「PanelFeatureState」的私有靜態最終類,該類包含一個名爲「MenuBuilder菜單」的字段,您需要反射才能訪問此類及其字段。 Menu inflator讀取xml資源文件並將菜單存儲在此對象中。

總結: PhoneWindow-> PanelFeaturestate-> MenuBuilder菜單

你可以參考使用從活動PhoneWindow: activity.getWindow()

+0

由於PhoneWindow不是公共API,你需要使用反射。在我的情況下,我知道菜單項的文本,但我需要找到MenuItem的ANdroidId,所以我使用反射來獲取菜單項,然後閱讀它的androidId。 – 2013-07-26 07:37:13