2011-03-25 65 views
3

我寫這需要一個單獨的活動,以活動的執行一個Android測試用例的活動被測試(不適用於測試的緣故,但只是爲了獲得進入ContentResolver的,所以我可以改變一些電話設置)。調用從AndroidTestCase

是它在所有可能從一個測試用例或者以另一種方式開始活動。

我知道用於測試活動的AndroidTestCase類,我在測試中使用它,但是我需要使用ContentResolver來更改電話設置,然後測試被測活動的反應,所以我需要另一個應用程序組件來更改這些設置。

注:我放開後面多活性測試的複雜性(需要一個ActivityManager),但我只是想使用它的方法來改變設置,所以我甚至可以有在onCreate方法的邏輯。

回答

2

AndroidTestCase和ActivityInstrumentationTestCase2都提供方法,以獲得背景信息

AndroidTestCase:

getContext(); 

ActivityInstrumentationTestCase2

getInstrumentation().getContext(); 

您可以使用這些背景下,推出另一項活動,但是權限從應用測試通過的,所以在我的情況與ContentResolver的我只需要修改我的設置在應用程序中做下測試相同的權限。

在我而言,這是沒有好,所以我不得不使用它創建自己的權限,一個單獨的應用程序和後臺服務當時我能夠使用上下文啓動意圖控制。

4

Android提供了測試活動專門的儀器框架。您必須使用此框架,因爲「活動」具有複雜的生命週期,在此提供的框架之外無法調用。查看Activity Testing的Android文檔的開發部分中的測試鏈接。如果這不能回答你的問題,你可能會改寫一下。

編輯

你真的應該延伸ActivityUnitTestCase測試的活動,不AndroidTestCase。您可以獲得更多針對您需要測試的功能。如果擴展ActivityUnitTestCase,則會有一個名爲launchActivity的函數。它會啓動你需要的活動並給你一個活動的實例,以便你可以調用它的方法,比如set,get和finish。這應該可以滿足您一次操作單個和多個活動所需的任何操作。

示例代碼:

@MediumTest 
public class Test extends ActivityUniTestCase<HelloActivity> { 

    public Test(Class<HelloActivity> activityClass) { 
     super(activityClass); 
    } 

    @MediumTest 
    public void testLifeCycleCreate() { 
     HelloActivity hActivity = startActivity(new Intent(Intent.ACTION_MAIN), null, null); 
     getInstrumentation().callActivityOnStart(hActivity); 
     getInstrumentation().callActivityOnResume(hActivity); 

     GoodByeActivity gActivity = launchActivity("package.goodbye", GoodByeActivity.class, null); 
     gActivity.finish(); 
    } 
} 
+0

感謝您的回覆。我意識到這些測試機制,並且我正在使用AndroidTestCase來測試實際活動,但是我需要使用ContentResolver來更改某些電話設置,因此我需要一個活動來更改此設置。這不能是活動 – zode64 2011-03-25 18:53:02

+0

+1,因爲這是我的理解,因爲「活動具有複雜的生命週期並且在所提供的框架之外是不可調用的」。 – zode64 2011-03-25 18:57:29