Android单元测试 mock Context,mock静态类的静态方法,测试方法的顺序_android 单元测试 静态方法_洌冰的博客-程序员宅基地

技术标签: Android  

mock Context

我们写单元测试时,经常会用到context对象,但是直接使用context经常报空指针异常
正确的mock方式如下
1.添加变量

@Mock
private Context mockApplicationContext;

2.在setUp方法中初始化

@Before
public void setUp() throws Exception {
    MockitoAnnotations.initMocks(this);
}

3.在使用到context的地方灵活使用mockito的when方法
比如我们用到context经常是因为String的关系,可以这样用

        when(mockApplicationContext.getString(R.string.filterOthers))
                .thenReturn("Other");

mock静态类的静态方法

在我们测试时经常遇到静态类的静态方法无法通过测试,比如TextUtils
其mock顺序如下
1.测试类前声明

@RunWith(PowerMockRunner.class)
@PrepareForTest({TextUtils.class, Xxx.class})
public class Xxx{
}

2.初始化

    @Before
    public void setUp() throws Exception {
        PowerMockito.mockStatic(TextUtils.class);
    }

3.在具体的测试方法灵活使用mockito的when方法
比如

        when(TextUtils.isEmpty(price.getType()))
                .thenReturn(price.getType().length() == 0);

测试方法的顺序

我们写测试方法时经常会遇到方法A调用B 方法B调用方法C的情况比如

		if(flag1 == true){
			methodA();
		}else{
			methodB(key);
		}
		
		methodA(){
			if(flag2 == true){
				methodC();
			}else{
				methodD();
			}
		}
		
		methodB(key){
			switch (key) {
			case a:
				methodE();
				break;
			case b:
				methodF();
				break;
			case c:
				methodG();
				break;
			default:
				break;
			}
		}

那么我们写测试方法的顺序从末端的方法写会容易一些,比如上面这个例子我们写的顺序是EFG CD AB(组内顺序不区分)
当然如果写测试方法写的多了应该知道为方法A写测试方法时只要把两个分支都测了就OK了其实与方法内部调用的方法C和方法D没有关系。但是对于刚接触单元测试的我来说,这样写感觉上简单一些哈哈。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u011109881/article/details/86157971

智能推荐

C++回炉之_C++PrimerPlus_第四章 复合类型(二)_cout <<a<<endl等价于-程序员宅基地

指针声明和初始化int a = 5;int* p = &amp;a; // &amp; 取地址使用cout &lt;&lt; *p &lt;&lt; endl; // * 取值指针的危险 空指针 没有指向具有一定意义的内存野指针 指针变量未初始化 – 可手动初始化为nullptr 或 NULL指针释放后之后未置空 – 可手动初始化为null..._cout <<

onchange 事件-程序员宅基地

定义和用法onchange 事件会在域的内容改变时发生。语法onchange="SomeJavaScriptCode"参数描述SomeJavaScriptCode必需。规定该事件发生时执行的 JavaScript。支持该事件的 HTML 标签:<input type="text">, <select>,...

中国半导体解围无芯之困:需资金支持 更需要人才培养_芯迪半导体行业地位-程序员宅基地

12月9日,由京东方牵头的一份总投资超过100亿元的硅产业基地项目合作意向书在国内签署,成为近两年中国半导体近万亿元投资项目中的一个。在中国半导体产业长期且大规模依赖进口的背景下,相关产业的发展受到国家有关部门的重视,但由于海外并购频频受到外国政府阻挠,自身半导体技术的研发便显得更加重要。在业内人士看来,中国半导体产业除了需要资金支持,更需要人才的培养。  万亿投资  这份10_芯迪半导体行业地位

数值字节与范围-程序员宅基地

字节与范围字节与范围换算:1个字节8位。如 1000 0000。 计算机中数值一律用二进制数来存储,用最高位表示符号。0为正,1为负,剩下的为数值的二进制值。存储可以加上UNSIGNED取消符号: 如 Tinyint UNSIGNED 。默认情况下都是有符号的。 所以存储范围也分为两类:无符号 1 1111111(二进制) = 255(十进制)有符号 1 1111111 (二进制) =

Javascript特效之可编辑下拉框_js 下拉框可编辑-程序员宅基地

javascript之可编辑下拉框HTML里的select box只能下拉选择,是不可以编辑的,本范例实现了一个既可以编辑又可以下拉的select box,在很多项目中能够用到。看看效果图:如图可以实现编辑下拉框,实现既有文本框功能又有下拉框功能。就是input控件基础上添加可选项&lt;input type="text" name="myText" value="Norway" selectBo..._js 下拉框可编辑

随便推点

一台服务器虚拟交换机,产品技术-H3C S1010V虚拟交换机-新华三集团-H3C_光源资本的博客-程序员宅基地

基于端口策略组的虚拟机网络连接H3C S1010V中定义的端口策略组是一组网络策略属性集,如VLAN、PVLAN、VEPA、链路聚合等。它允许为同一类型或级别的虚拟机定义相同的网络策略,然后通过VMware vCenter将策略组应用到虚拟机的虚拟网卡上。当策略组中的网络策略发生变化时,这些变化的网络策略能够立即生效,而无需重新启动虚拟机,保证了业务系统的连续性和高可用性。基于端口策略组的虚拟机网...

安装sonar代码质量分析工具,以及java8和java7的安装处理-程序员宅基地

2019独角兽企业重金招聘Python工程师标准>>> ..._sonar 这对 java7 的

文章收录技巧(怎么提升网站伪原创文章的收录)_提高文章收录方法-程序员宅基地

最近很多站长都被一个问题所困扰,那就是收录问题,我们都知道网站收录一直是SEO优化考核的重要标准之一,所以这个问题对我们的影响非常大。很大部分站长做网站收录都是用文章来做的,所以解决收录问题就是要提升文章收录,那文章要怎么做才能让我们的收录提升呢? 一、文章有规律更新。 百度蜘蛛是循序渐进的对网站进行考察,比较喜欢每天有规律更新内容的那些网站。绝大一部分新网站如果没有及时更新,百度蜘蛛后续就可能不来了,这样网站的收录就会非常不好。所以,网站文章的更新需要每天进行,养..._提高文章收录方法

VirtualData-快速生成虚拟数据辅助开发-程序员宅基地

VirtualData 引用 implementation 'com.licola:virtual:1.0.2'主要目的是辅助开发阶段的测试,不建议在发布版引用,所以一般应该这样配置 testImplementation 'com.licola:virtual:1.0.2'使用CollectionUserModel models = Virtu...

MCIWnd的使用-程序员宅基地

Windows中提供了一个MCIWnd窗口类,可以更加方便的在一个VC窗口中操作多媒体。   使用MCIWnd,源文件中需要包含头文件 vfw.h,在Project->Settings->Link->Object/libray module中加入库 vfw32.lib。 1、MCIWnd的创建   MCIWnd子窗口的创建可使用MCIWndCreate函数:     H...

首发:实探比亚迪·华为打造的全球首条无人驾驶云轨_比亚迪云轨打破了谁的技术垄断-程序员宅基地

刷脸坐车、无人驾驶……这些看似科幻的场景,如今在银川的云轨上都已成为现实。2018年1月10日,一列全自动无人驾驶的比亚迪云轨,满载着来自全国各地的“乘客”从空中徐徐驶过,标志着中国首条实现无人驾驶的跨座式单轨线路正式通车运行,比亚迪银川云轨也就此成为全球首条搭载100%自主知识产权无人驾驶系统的跨座式单轨。  (比亚迪云轨可实现全自动无人驾驶)  全球首条搭载自主知识产权无人驾驶系统的跨座_比亚迪云轨打破了谁的技术垄断