在单元测试,集成测试与功能测试中模拟依赖
作者:lovexiaov 发布时间:[ 2016/5/27 10:35:27 ] 推荐标签:单元测试 集成测试
然后通过自定义RobolectricGradleTestRunner类使用该类。
自定义带有定制化 application 类的 Robolectric 测试执行器
public class IntegrationRobolectricTestRunner extends RobolectricGradleTestRunner {
// This value should be changed as soon as Robolectric will support newer api.
private static final int SDK_EMULATE_LEVEL = 21;
public IntegrationRobolectricTestRunner(@NonNull Class<?> clazz) throws Exception {
super(clazz);
}
@Override
public Config getConfig(@NonNull Method method) {
final Config defaultConfig = super.getConfig(method);
return new Config.Implementation(
new int[]{SDK_EMULATE_LEVEL},
defaultConfig.manifest(),
defaultConfig.qualifiers(),
defaultConfig.packageName(),
defaultConfig.resourceDir(),
defaultConfig.assetDir(),
defaultConfig.shadows(),
MyIntegrationTestApp.class, // Here is the trick, we change application class to one with mocks.
defaultConfig.libraries(),
defaultConfig.constants() == Void.class ? BuildConfig.class : defaultConfig.constants()
);
}
}
如何在 Instrumentation 测试中使用 Dagger 2 模拟并注入依赖?
Google 的那帮兄弟建议使用 flavors,但我并不推荐使用它。因为 flavors 越多,构建应用花费的时间越长,你也会越不喜欢 Gradle 以及整个构建过程。如果可以避免,尽量不要使用 flavors。
主要思路:与 Roboletric 测试相似——通过修改Application类来实现,不过这次是针对 Instrumentation 测试。
为了实现此方法,你需要自定义 Instrumentation 测试执行器,并将它们添加到build.gradle中。
public class CustomInstrumentationTestRunner extends AndroidJUnitRunner {
@Override
@NonNull
public Application newApplication(@NonNull ClassLoader cl,
@NonNull String className,
@NonNull Context context)
throws InstantiationException,
IllegalAccessException,
ClassNotFoundException {
return Instrumentation.newApplication(CustomApp.class, context);
}
}
将该类添加到build.gradle中:
android {
defaultConfig {
testInstrumentationRunner 'a.b.c.CustomInstrumentationTestRunner'
}
}
代码示例:我已经将内容更新到 #qualitymatters app中,并做了分析,展示了在单元测试,集成测试和功能测试中模拟依赖的方式。 因为我们在测试真正应用时需要分析,但在实验中却不想分析!也许你已经注意到了,我们没有添加 flavors。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
iOS单元测试mocha、chai、sinon和istanbul实现百分之百的单元测试覆盖率关于单元测试的总结及思考编写更好的Java单元测试的7个技巧Android单元测试框架Robolectric3.0介绍(一)使用Kiwi单元测试总结单元测试如此重要,为什么你不知道Python单元测试??使用装饰器实现测试跳过和预期故障对Controller的单元测试写好单元测试的10个技巧单元测试的重要性Angular单元测试系列??Component、Directive、Pipe 以及ServiceAndroid单元测试的整理提升单元测试体验的利器--Mockito使用总结iOS UnitTest单元测试Vue的单元测试探索(二)
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11热门文章
常见的移动App Bug??崩溃的测试用例设计如何用Jmeter做压力测试QC使用说明APP压力测试入门教程移动app测试中的主要问题jenkins+testng+ant+webdriver持续集成测试使用JMeter进行HTTP负载测试Selenium 2.0 WebDriver 使用指南