簡體   English   中英

Android測試套件使用robolectric嗎?

[英]Android test suite using robolectric?

我正在嘗試搜索有關如何為使用Robolectric的測試類運行測試套件的示例,例如,我有此類:

@Config(sdk = 16, manifest = "src/main/AndroidManifest.xml")
@RunWith(RobolectricTestRunner.class)
public class RestaurantModelTest {

    //setUp code here...

    @Test
    public void testFindByLocation() throws Exception {
         //test code here
    }

}

RestaurantModelTest所有單元測試和斷言都可以通過,但是我還有另一個類可以稱之為XModelTest (所有聲明和單元測試都可以通過。

我的問題

我找不到有關如何使用robolectric使用測試套件的任何教程/示例。

是否應該在我的RestaurantModelTest和XModelTest所在的同一包中完成? 如果不在哪里?

我也嘗試過使用JUnit的TestSuite進行此操作,但是會出現很多問題,我的TestSuite擴展類是否應該擴展TestSuite超級類?

如果有人可以使用我的RestaurantModelTestXModelTest類給我一個簡短的例子,那就太好了。

我相信,我也回答了您的第二個問題,部分涵蓋了這個問題- 無法運行android測試套件:線程“ main”中的異常

以下是使用Robolectric編寫套件的方法:假設我們有2個模型類。

CartModel.java

public class CartModel {
    public float totalAmount;
    public int products;

    public void addToCart(float productPrice) {
        products++;
        totalAmount += productPrice;
    }
}

RestaurantModel.java

public class RestaurantModel {    
    public int staff;

    public void hire(int numberOfHires) {
        staff += numberOfHires;
    }
}

讓我們為它們編寫一些虛擬測試:

CartModelTest.java

@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk=21)
public class CartModelTest {

    @Test
    public void addToCart() throws Exception {
        CartModel cartModel = new CartModel();
        assertEquals(0, cartModel.totalAmount, 0);
        assertEquals(0, cartModel.products);
        cartModel.addToCart(10.2f);
        assertEquals(10.2f, cartModel.totalAmount, 0);
        assertEquals(1, cartModel.products);
    }
}

RestaurantModelTest.java

@RunWith(RobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, sdk=21)
public class RestaurantModelTest {

    @Test
    public void hire() throws Exception {
        RestaurantModel restaurantModel = new RestaurantModel();
        assertEquals(0, restaurantModel.staff);
        restaurantModel.hire(1);
        assertEquals(1, restaurantModel.staff);
    }
}

現在是最后一步-將它們組合到一個ModelsTestSuite.java

@RunWith(Suite.class)
@Suite.SuiteClasses({
        RestaurantModelTest.class,
        CartModelTest.class
})
public class ModelsTestSuite {}

要運行-只需右鍵單擊ModelsTestSuite ,然后單擊“運行ModelsTestSuite”。 而已!

NB! 在Android Studio 2.0 3b中,您必須禁用即時運行(首選項->構建,執行,部署->即時運行->啟用即時運行-取消選中),以便運行Robolectric測試(以避免java.lang.RuntimeException: java.lang.ClassNotFoundException: Could not find a class for package: <package name> and class name: com.android.tools.fd.runtime.BootstrapApplication )。

希望對您有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM