我正在尝试搜索如何为使用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超类,会出现很多问题吗?
如果有人可以使用我的RestaurantModelTest
和XModelTest
课程给我一个简短的例子,那就太棒了。
答案 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
)。
我希望,这有帮助