繁体   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