2011-03-07 79 views
16

我想找到一種方法讓我的儀器測試可以訪問測試包內生成的字符串資源。訪問儀器測試資源

更多細節:

我從ActivityInstrumentationTestCase2繼承一個Android測試案例。我使用Eclipse的新Android測試項目來首先創建測試。測試項目有資源(類似於常規Android項目的資源)。我試圖找到一種方法來編程訪問各種單獨測試中測試項目中的字符串資源。我曾嘗試:

String s = getInstrumentation().getContext().getString(R.string.blah); 

String s = mActivity.getApplicationContext().getString(R.string.blah); 

這兩種方法都拋出NotFoundException。我在我的strings.xml中定義了字符串「blah」。上面的代碼中的R是從我的測試包導入的,而不是被測試的應用程序的包。我可以通過後面的調用訪問應用程序包中定義的資源。

找出在我的測試中訪問XML定義的字符串資源的方法會很有用(因爲我想避免在代碼中輸入字符串)。我究竟做錯了什麼?

回答

1

我認爲如果不將資源文件存儲到其他地方,這是不可能的,但是您可以使用類似Robotium的地方,您只需使用Solo.getString()並獲得資源。

3

我想:

String s = getInstrumentation().getContext().getString(com.myProject.test.R.string.blah); 

其中com.myProject是該項目的包進行測試和com.myProject.test是測試項目的包。

它適用於我,如果我把代碼放在setup()裏面。如果我將它放在構造函數中,它不起作用。

17

即使這個職位不再是當前 - 這除了可以幫助別人:

要理解這是如何工作的,你要記住,你的儀表住在上下文是另一個比應用程序上下文你正在運行你的測試。正如你所說的,你不能從instumentation上下文訪問你的目標資源。您可以在測試項目中一個單獨的XML文件定義一些您的儀表背景下,或者 - 如果你想使用預定義的資源 - 你可以讓他們這樣說:

Resources res = getInstrumentation().getTargetContext().getResources(); 
res.getString(R.string.xxx); // get a string resource 

無論是儀表背景(如Wujun寫的),也沒有可用的目標環境,直到測試用例結構完全完成。

+4

「getTargetContext()」替代「getContext()」做了訣竅:-) (也許海報可以標記答案爲「接受」?) – Christine 2014-08-30 14:21:41

+0

在(支持)測試運行器的0.5版本中, getInstrumentation()方法被刪除。使用InstrumentationRegistry.getTargetContext()來獲取上下文。 – Metallica 2016-07-06 12:03:33