Android测试:关于junit、espresso(1),2024年最新2024最新网易软件测试面试题目

mockito

================================================================

这两个都是Android测试框架,主要是可以脱离Android设备调试环境,在纯Java环境下面完成Android测试用例。也就是说不像espresso那样需要连接一台android设备了,我们可以像运行JUnit那样来运行android测试用例

在junit单元测试中,需要手动构造测试中对对象的依赖。如A对象方法依赖B对象方法,在测试A对象的时候,我们需要首先构造出B对象,这样子增加了测试的难度,如果依赖过多,相应地也增大了编写测试用例的难度。

Mockito是一个Java开源的测试框架,Mockito在测试中尝试移除我们传统JUnit单元测试中使用的Expect方式,这样子有效降低代码的耦合。使得我们只测试我们需要的方法和类,而不需过多的考虑依赖类

Mockito不能模拟final类、匿名类和Java基本类型;对于final方法和static方法,不能对其 when(…).thenReturn(…) 操作。

另外mock对象,大多都需要植入到应用代码中,从而进行verify(…)操作;但应用代码中不一定有相应的set方法,如果要植入,就需要为了测试添加应用代码。也就是说A对象中需要增加一个set方法专门用来引入mock过的B对象,这样也就是说需要为一个测试用例在原来的对象中增加set方法,这样也是有点复杂。后面我们举例可以用反射来解决这个问题。

@Test

public void testList() {

List mockedList = mock(List.class);

mockedList.add(“one”);

mockedList.clear();

verify(mockedList).add(“one”);

verify(mockedList).clear();

}

适用范围:

解决依赖问题,一般用来测试费生命周期相关的类,比如MVP的P层和M层。如果涉及到生命周期相关的,这需要用到下面的Robolectric测试框架。

Robolectric

====================================================================

Robolectric是一款专门针对Android SDK的测试框架,我们只需要在Java环境中即可运行。

public class WeatherActivityTest {

private WeatherActivity activity;

private WeatherPresenter presenter;

@Before

public void setUp() {

activity = Robolectric.setupActivity(WeatherActivity.class);

}

@Test

public void testToSettingPage(){

activity.toSettingPage();

Intent expectedIntent = new Intent(activity, SettingActivity.class);

Intent actualIntent = ShadowApplication.getInstance().getNextStartedActivity();

Assert.assertEquals(expectedIntent.getComponent(), actualIntent.getComponent());

}

}

通过Robolectric.setupActivity启动一个activity,当然这个activity不会真正的启动。

通过testToSettingPage方法,我们测试activity的toSettingPage方法启动后,是否真的去了SettingActivity这个页面。

适用范围:

有android生命周期的,当然Robolectric功能点不知这些,有兴趣的可以去官网看看:http://robolectric.org/

综合应用

=============================================================

以上四个测试框架各有优点,我们实际应用的时候往往是几种框架一并使用。

比如android开发过程中,我们为了避免使用到android设备来测试,所以我们会用到Robolectric框架,同时也会用到JUnit和Mockito,下面我们看下具体的例子:

@RunWith(RobolectricTestRunner.class)

@Config(sdk = 28)

public class WeatherActivityTest {

private WeatherActivity activity;

private WeatherPresenter presenter;

@Before

public void setUp() {

activity = Robolectric.setupActivity(WeatherActivity.class);

presenter = mock(WeatherPresenter.class);

activity.setPresenter(presenter);//如果不用这种方式就要用反射获取private成员变量

}

@Test

public void testGanmaoClick() {

Button ganmao = activity.findViewById(R.id.ganmao);

ganmao.performClick();

verify(presenter).getGanmao();

//如果不用activity.setPresenter(presenter)则使用下面代码

// try {

// Field field = WeatherActivity.class.getSuperclass().getDeclaredField(“mPresenter”);

// field.setAccessible(true);

// field.set(activity, presenter);

// ganmao.performClick();

// verify(presenter).showTest2();

// } catch (Exception e) {

// //error

// }

// verify(presenter).showTest1();

}

@Test

public void testWenduClick() {

Button wendu = activity.findViewById(R.id.wendu);

wendu.performClick();

assertThat(wendu.getText().toString(), is(“点击获取城市今天温度”));

assertEquals(“验证温度”, wendu.getText().toString(), “点击获取城市今天温度”);

}

@Test

public void testShadows() {

TextView wendu = activity.findViewById(R.id.wendu);

ShadowTextView stv = Shadows.shadowOf(wendu);

assertEquals(“验证温度示”,stv.innerText(),“点击获取城市今天温度”);

}

@Test

public void testToSettingPage(){

activity.toSettingPage();

Intent expectedIntent = new Intent(activity, SettingActivity.class);

Intent actualIntent = ShadowApplication.getInstance().getNextStartedActivity();

Assert.assertEquals(expectedIntent.getComponent(), actualIntent.getComponent());

}

@Test

public void testGetId() {

when(presenter.getId()).thenReturn(100);

}

@Test

public void testList() {

List mockedList = mock(List.class);

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数软件测试工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上软件测试开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注软件测试)
img

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

体系化!**

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注软件测试)
[外链图片转存中…(img-LuKUfGt1-1712647827757)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值