2013-12-10 66 views
1

在我的應用程序(基於Gradle的Android Studio項目)中,我需要在測試下運行時創建具有不同名稱的文件。例如,在製作中,我想使用名稱com.myapp.file並在測試時運行,com.myapp.file。 測試如何判斷我的Android應用是否由InstrumentationTestRunner運行?

我想做的事是這樣:

String packageName = getApplicationContext().getPackageName(); MyFile file = new MyFile(packageName);

我希望下試運行(./gradlew connectedInstrumentTest)與正常時的的packageName會自動將不同。我檢查了我的清單,它顯示我的測試清單有一個包名以.test結尾,但它在運行時似乎不會傳遞給應用程序。

是否有到任何一個辦法:

1)更新我的gradle產出或項目文件運行測試

- 或 -

2)當使用不同的包名是有辦法編程式地講,比我的應用程序正在測試中運行?

+0

因此,在測試運行器中,您可以運行安裝和拆卸方法。爲什麼不在這些方法中建立文件名,並且在使用文件名的地方,將其作爲參數接受,而不是從包名稱中推斷出來? –

+0

是的,這個工程。這是我目前正在使用的解決方案。我發佈這個問題是爲了尋找替代方案。我想要一個替代方案的原因是我不得不修改我的類的公共構造函數來接受文件名,我不希望這樣做。如果這是有道理的,我想隱藏這個實現細節。 –

+0

我能理解。不幸的是,我不認爲有一種方法可以告訴你正在進行測試,但我不是100%的,因爲這是我不會做出答案的問題。但是,我會考慮從共享首選項文件中獲取文件名,並在測試設置中的文件中設置名稱。不要將它作爲參數接受,請從首選項中拉出名稱。只要確保在拆卸過程中更改名稱即可 –

回答

0

實際上,由於Android本質上是使用測試跑步者的JUnit測試,所以我認爲我可以放心地說,Android並沒有給你一種明確告訴你正在測試模式下運行的方法。我會遵循這個SO的建議在這裏回答:How can I find out if code is running inside a JUnit test or not?

我肯定會同意,這是不好的做法,以不同的方式運行,但如果你只是想保存到不同的文件測試,似乎不太公平。我將使用共享首選項或Application類中設置的全局變量來檢查您是否正在運行測試。由於通常在生產代碼中引用測試是一個壞主意,我認爲只需要在某個地方定義文件名並在setup和teardown中更改它就是這裏的正確方法。

相關問題