单元测试整理
来源:互联网 发布:淘宝好评返现怎么罚款 编辑:程序博客网 时间:2024/06/03 17:49
单元测试,还是在刚接触android的时候写了个demo,工作之后,经历的公司都没有做过单元测试。最近在看包建强的《App研发录》,书中提到了这个,正好今天项目上线,闲下来可以学点东西。以后可能也不会用到,但是,多掌握点知识总是好的。
学习的时候主要参考了这篇文章http://www.jianshu.com/p/03118c11c199,这篇教程翻译自Google I/O 2015中关于测试的codelab。我主要记录一下学习过程中遇到的问题。
1.
解决方法是:
defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"}
2.
解决方法是:
dependencies { androidTestCompile ('com.android.support.test.espresso:espresso-core:2.0') { exclude group: 'javax.inject' }}
今天就遇到这两个,以后有问题会继续更新。2016/5/6
2016/6/6
使用 robolectric,参考文章:
http://mp.weixin.qq.com/s?__biz=MzAwNzc4OTYwMA==&mid=2653509690&idx=3&sn=74b57f7078236bcb12b675cf34148a9f&scene=4#wechat_redirect
在使用robolectric的时候遇到的问题:
java.lang.RuntimeException: build\intermediates\bundles\debug\AndroidManifest.xml not found or not a file; it should point to your project's AndroidManifest.xml
跟文章作者设置的一模一样啊,为啥会报错呢?哪有那么多为什么,有错误得解决啊。
看错误提示,需要指向自己项目的AndroidManifest.xml文件。OK,Config这个文件有个属性manifest,可以配置AndroidManifest.xml的路径。
@Config(constants = BuildConfig.class, sdk = 21,manifest = "E:/myproject/xxx/app/build/intermediates/manifests/full/debug/AndroidManifest.xml")@RunWith(RobolectricGradleTestRunner.class)
配置好以后,运行测试方法,继续上边的错误。哇,居然不起作用。
看看RobolectricGradleTestRunner是怎么设置路径的。
AndroidManifest.xml、res、assets默认是用的这个文件夹下的private static final String BUILD_OUTPUT = "build/intermediates";
看下manifests的路径是怎么设置的,
/***flavor 和 type 都是从BuildConfig配置文件里取得值*public static final String BUILD_TYPE = "debug";*public static final String FLAVOR = "";**/if (FileFsFile.from(BUILD_OUTPUT, "manifests").exists()) { manifest = FileFsFile.from(BUILD_OUTPUT, "manifests", "full", flavor, type, "AndroidManifest.xml"); } else { manifest = FileFsFile.from(BUILD_OUTPUT, "bundles", flavor, type, "AndroidManifest.xml"); }
好像并没有用到Config.manifest这个配置,不过我们知道了,AndroidManifest.xml这个路径是神马,默认是build/intermediates/manifests/full/debug/AndroidManifest.xml,如果这个路径不存在,会查找build/intermediates/bundles/debug/instant-run/AndroidManifest.xml这个路径。
看项目目录,这两个都是存在的。那应该就是需要指定全路径吧。
我们可以继承RobolectricTestRunner,来自定义TestRunner,
public class CustomTestRunner extends RobolectricTestRunner { private static final String BUILD_OUTPUT = "E:/myproject/xxx/app/build/intermediates/"; public CustomTestRunner(Class<?> testClass) throws InitializationError { super(testClass); } @Override protected AndroidManifest getAppManifest(Config config) { String manifestPath = BUILD_OUTPUT + "manifests/full/debug/AndroidManifest.xml"; String resDir = BUILD_OUTPUT + "res/merged/debug"; String assetsDir = BUILD_OUTPUT + "assets/debug"; AndroidManifest manifest = createAppManifest(Fs.fileFromPath(manifestPath), Fs.fileFromPath(resDir), Fs.fileFromPath(assetsDir),"com.uthing"); return manifest; }}
AndroidManifest.xml上层文件我直接写死了,可以参考RobolectricGradleTestRunner根据 flavor和build_type来动态改变。
最后设置成自己的testrunner类,
@Config(sdk = 21 )@RunWith(CustomTestRunner.class)
再次运行测试方法,尼玛,终于绿了。
2016/6/7
测试方法代码SplashActivity2 splashActivity2 = Robolectric.setupActivity(SplashActivity2.class);splashActivity2.findViewById(R.id.bt).performClick();Intent intent = new Intent(splashActivity2, LoginActivity.class);ShadowActivity shadowActivity = Shadows.shadowOf(splashActivity2);Intent actualIntent = shadowActivity.getNextStartedActivity();Assert.assertEquals(intent,actualIntent);
错误信息:Error:(30, 30) Gradle: error: cannot access AndroidHttpClient
class file for android.net.http.AndroidHttpClient not found
解决办法:
android {
useLibrary ‘org.apache.http.legacy’
}
- 单元测试整理
- 单元测试笔记整理
- Android 单元测试链接整理
- ios单元测试链接整理
- 【整理】Python 单元测试框架
- arquillian + HSQLDB 单元测试问题整理
- OCMock单元测试部分知识点整理
- iOS单元测试参考链接整理
- TDD 单元测试遇到问题整理
- 【整理】python单元测试Mock总结
- Junit单元测试入门与整理
- android 单元测试之dialog测试链接整理
- 【整理】单元测试与功能测试的区别
- 测试工具整理(3)——单元测试
- 2.9 Android中的 单元测试<未整理,只有图片>
- C# Visual Studio环境下进行单元测试【转】【整理】
- python的unittest单元测试框架断言整理汇总
- 前端接口服务器的文字性整理,方便写单元测试
- 关于RSA算法密钥长度/密文长度/明文长度
- CAShapeLayer相关内容
- 5-13 统计工龄 (20分)
- 安卓五子棋小游戏
- array_unshift.php
- 单元测试整理
- 动态分配数组内存赋值后,怎样得到数组的行数和列数
- 欢迎使用CSDN-markdown编辑器
- 关于Android 6.0 WebView的两个问题
- bzoj 1096: [ZJOI2007]仓库建设
- swift2.0 学习笔记One
- php和mysql中遇到的乱码问题
- 【OpenCV入门指南】第十三篇 人脸识别
- Android studio 里面的Dependencies 里面没有添加和删除的按钮的解决办法