2013-02-22 140 views
4

當我創建JUnit中3.X的參數化測試的情況下,我通常喜歡的東西參數JUnit測試

public static Test suite() { 
    TestSuite s = new TestSuite(); 

    for (int i = MIN; i < MAX; ++i) { 
     s.addTest(new MyTest(i)); 
    } 
} 

suite()方法創建一個TestSuite正確調用-線。當我用我的Android測試項目嘗試這個時,測試不運行。如何讓我的測試在仿真器上運行?或者有沒有不同的方式來創建Android的參數化測試?

更多的想法:

通常我跑我的測試用命令行:

adb shell am instrument -w [-e class <fully qualified test class name>[#<test method name>()]] <Android package name>/android.test.InstrumentationTestRunner 

這讓我選擇它測試從我的測試套件運行。理想情況下,我想以這種方式運行參數化測試。來自@Appu的評論中的鏈接描述了構建一個運行JUnit測試的單獨應用程序。作爲其中的一部分,這個應用程序有一個自定義TestRunner。我很可能借用這些想法來創建TestRunner,我可以使用它來代替 android.test.InstrumentationTestRunner。對於一項並不少見的任務來說,這看起來很多工作。如果Android API中已經有類似的解決方案,我不想重新發明輪子。有人知道這樣的事情嗎?另外,其他替代解決方案將會有所幫助。

沒關係,它看起來像@dtmilano已經張貼了這個作爲一個答案......

+1

[This](http://mylifewithandroid.blogspot.in/2008/11/junit-in-android.html)可能有幫助。這是我最喜歡的博客之一。 – Kanth 2013-02-22 06:11:07

+0

@Appu謝謝。隨意張貼,作爲答案。你至少值得讚賞;-) – 2013-02-22 06:13:36

+0

那麼你的問題+1。但是,如果它真的幫助您解決問題,我可以將其作爲答案發布。 – Kanth 2013-02-22 06:16:14

回答

2

您可以實現測試運行,以能夠傳遞參數給Android的測試。 請參閱how to pass an argument to a android junit test (Parameterized tests)的示例。

+0

當我編輯我的問題後,我注意到你基本上發佈了類似於我的想法引導我的東西。我不知道我錯過了這個答覆。我通常很全面地檢查我的通知;-( – 2013-02-26 00:40:29

+0

現在我看了一下'InstrumentationTestRunner'javadocs,我發現我可以重寫'getTestSuite()'和/或'getAllTests()'方法來插入測試到測試套件這樣我可以使用構造函數或其他解決方案將參數傳遞給我的測試用例,而不是將一個getter添加到我的自定義InstrumentationTestRunner。 – 2013-02-26 00:50:24

2

或者是有不同的方式來創建Android的參數化測試?

我們(Square)爲此寫了一個名爲Burst的圖書館。如果在測試構造函數中添加枚舉參數,Burst的測試運行器將爲每個枚舉值組合生成一個測試。例如:

public class ParameterizedTest extends TestCase { 
    enum Drink { COKE, PEPSI, RC_COLA } 

    private final Drink drink; 

    // Nullary constructor required by Android test framework 
    public ConstructorTest() { 
    this(null); 
    } 

    public ConstructorTest(Drink drink) { 
    this.drink = drink; 
    } 

    public void testSomething() { 
    assertNotNull(drink); 
    } 
} 
+0

enum是嵌套在測試類中還是可以嵌套是一個獨立的類還是來自另一個類的嵌套'enum'? – 2014-10-21 18:59:56

+0

@代碼學徒它不是必需的,任何枚舉都可以工作。 – 2014-10-21 19:07:31

+0

太棒了!我會將它添加到我的Square庫列表中以學習。不再感到驚訝。感謝您對Android開發社區的所有貢獻。 – 2014-10-21 19:12:29

1

半響後最初寫這個問題,我發現我可以直接運行測試類,它包含一個靜態suite()方法:

adb shell am instrument -w -e class <fully qualified test class name> <Android package name>/android.test.InstrumentationTestRunner 

然而,測試套件沒有按」當我嘗試在給定的包中運行所有測試時運行。

當然,這已經有一段時間了。現在我正在使用Android Studio而不是命令行。我仍然可以單獨運行測試類,但在選擇包或嘗試運行所有測試時仍然無法運行。

一個潛在的替代方法是用suite()方法編寫一個主測試類,該方法將所有測試添加到返回的TestCase。不幸的是,每次向我的套件添加新的測試類時,都需要手動編輯。