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?
如果有人可以使用我的 RestaurantModelTest
和 XModelTest
classes 给我一个简短的例子,那就太好了。
我相信,我也部分地回答了你的第二个问题 - 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
)。
希望对你有所帮助
我正在尝试搜索如何 运行 测试套件的示例 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?
如果有人可以使用我的 RestaurantModelTest
和 XModelTest
classes 给我一个简短的例子,那就太好了。
我相信,我也部分地回答了你的第二个问题 - 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
)。
希望对你有所帮助