Android测试套件使用robolectric?

时间:2015-12-16 15:41:34

标签: java android junit robolectric android-testing

我正在尝试搜索如何为使用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课程给我一个简短的例子,那就太棒了。

1 个答案:

答案 0 :(得分:3)

我相信,我已经部分地回答了这个问题,回答了你的第二个问题 - Can't run android test suite: Exception in thread “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中,您必须按顺序禁用即时运行(首选项 - &gt;构建,执行,部署 - &gt;即时运行 - &gt;启用即时运行 - 取消选中)运行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)。

我希望,这有帮助