Android 测试套件使用 robolectric?

Android test suite using robolectric?

我正在尝试搜索如何 ​​运行 测试套件的示例 class 使用 Robolectric 的测试套件,例如我有这个 class:

@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
    }

}

class RestaurantModelTest 的所有单元测试和断言都通过了,但我还有另一个 class 我们称之为 XModelTest (其中所有断言和单元测试正在路过。

我的问题

我没有找到任何 tutorial/example 如何使用测试 suite 使用 robolectric。

这应该在我的 RestaurantModelTest 和 XModelTest 所在的同一个包中完成吗?如果不是在哪里?

我也尝试用 JUnit 的 TestSuite 来做这个,但是如果 class 和我的 TestSuite extend extends TestSuite super class?

如果有人可以使用我的 RestaurantModelTestXModelTestclasses 给我一个简短的例子,那就太好了。

我相信,我也部分地回答了你的第二个问题 - 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 并单击 "Run 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)。

希望对你有所帮助