当前位置: 首页 > news >正文

免费刷网站百度关键词sem培训机构

免费刷网站百度关键词,sem培训机构,各类软件代理加盟,专业做网站建设公1 前言 编写Java单元测试用例,即把一段复杂的代码拆解成一系列简单的单元测试用例,并且无需启动服务,在短时间内测试代码中的处理逻辑。写好Java单元测试用例,其实就是把“复杂问题简单化,建单问题深入化“。在编写的…

1 前言

编写Java单元测试用例,即把一段复杂的代码拆解成一系列简单的单元测试用例,并且无需启动服务,在短时间内测试代码中的处理逻辑。写好Java单元测试用例,其实就是把“复杂问题简单化,建单问题深入化“。在编写的过程中, 我们也可以对自己的代码进行一个二次检查。

以下是我总结的一些编写单元测试的好处:

1.测试代码逻辑时,不需要启动整个应用。

2.单元测试可以覆盖边界值

3.提高原有代码的复用

4.可以有效避免代码改动后,对原有逻辑的潜在影响

2 准备环境

Mockito是目前最普遍的单元测试模拟框架。Mockito可以模拟应用中依赖的复杂对象,从而把测试对象和依赖对象隔离开。PowerMock为Mockito提供了扩展功能。为模拟静态方法,final类,和私有方法等。我们选择使用以Mockito为主,PowerMock为辅的框架来做单元测试。

2.1 引入Mockito和PowerMock包,在pom.xml文件中加入以下依赖:

<properties><powermock.version>2.0.9</powermock.version>
</properties>
<dependency><groupId>org.powermock</groupId><artifactId>powermock-core</artifactId><version>${powermock.version}</version><scope>test</scope>
</dependency>
<dependency><groupId>org.powermock</groupId><artifactId>powermock-api-mockito2</artifactId><version>${powermock.version}</version><scope>test</scope>
</dependency>
<dependency><groupId>org.powermock</groupId><artifactId>powermock-module-junit4</artifactId><version>${powermock.version}</version><scope>test</scope>

PowerMock目前最新版本为2.0.9【PowerMock链接】由于PowerMock包中已经包含了对应的Mockito和JUnit包,所以无需再单独引入。

3 一些常用的mock语句

3.1 模拟指定类的对象实例,用于模拟依赖对象(类成员)

在Spring中,这些成员对象通过@Autowire,@Resource,@Value等方式注入,可能涉及到环境配置或者依赖第三方接口。在单元测试中,不是我们关注的点,所以可以用mock模拟

//方法一
Mockito.mock(OrderInfo.class);
//方法二
@Mock
private OrderInfo orderInfo;@Before
public void setUp(){
MockitoAnnotations.initMocks(this);
}

3.2 定义被测试对象

把被测试服务类进行实例化

@InjectMocks
private OrderServiceImpl orderService;

3.3 模拟枚举类型/静态方法

需要把对应的模拟类放在@PrepareForTest中

//必须添加@RunWith和@PrepareForTest在类前
@RunWith(PowerMockRunner.class)
@PrepareForTest(OrderTypeEnum.class)//在@Before中添加枚举mock
@Before
public void beforeTest() {mockStatic(OrderTypeEnum.class);
}

3.4 模拟依赖方法

在模拟完依赖的参数和返回值后,可以利用Mockito功能,进行依赖方法的模拟。如果模拟对象还有方法调用,则需要模拟这些依赖对象的方法。

/***
when.thenReturn 和 doReturn.when是两种实现方式
只有在使用@Spy时才会有区别
参考链接:https://www.imooc.com/wenda/detail/594190#id_653606
***///模拟枚举的方法调用
when(OrderTypeEnum.getByValue(anyInt())).thenReturn(100);
//模拟依赖对象的依赖方法调用
doReturn(resultInfoDTO).when(orderInfoService).getLastOrderInfo(orderInfoDTO);

3.5 模拟构造方法

PowerMock提供了对构造方法的模拟,但是需要把构造方法的类放在@PrepareForTest中

//必须在@PrepareForTest中添加对应类
@PrepareForTest({OrderTypeEnum.class, OrderServiceImpl.class})
whenNew(OrderInfoDTO.class).withNoArguments().thenReturn(orderInfoDTO);

3.6 验证方法调用次数

被测方法调用后,一些方法会出现调用多次或根据不同条件进行不同次数的调用。此时,可以根据验证方法调用次数,确定代码的有效性

verify(orderInfoService,times(1)).getLastOrderInfo(orderInfoDTO);

3.7 验证返回值

对于方法调用后的出参,我们会有一定的预期。所以,可以根据校验返回值是否符合预期,确保返回值的正确性

Assert.assertEquals(result, "123");

3.8 验证异常对象

JUnit的@Test注解提供了一个expected属性,可以指定一个期望的异常类型,用于捕获异常并验证其异常类型。【注】:只能验证异常类型,不能验证异常信息。

@Test(expected = BPLException.class)

4 单测举例

下面是一个本地方法的单元测试用例,方法中调用了外部接口,并且其中包含了枚举值的使用。

源方法即需要单测方法:

首先,是单元测试时一些必要的初始化

4.1 单测场景一(确定接口调用,并返回值正确):

通过verify方法来确定接口是否调用过,并且只调用过1次。

通过assert来确认返回值是否满足预期

4.2 单测场景二(必要异常是否抛出):

通过在@Test注解上加入expected属性,测试当接口返回值为空时,是否可以抛出异常

4 总结

编写单元测试在开发中的地位举足轻重。在开发过程中,避免不了优化或重构历史代码。单元测试,在一定程度上可以帮助测试更新后逻辑,以及潜在调用链。另外也分享一些链接,希望可以帮助大家完成从0到1的搭建。

5 参考资料

  • Java编程技巧之单元测试用例编写流程:https://mp.weixin.qq.com/s/hX_RIYs-nBnqVwdq5B4rhg
  • powerMock的Git链接:https://github.com/powermock/powermock
  • powerMock简介:https://www.baeldung.com/intro-to-powermock
  • 避免Install的时候Skip test: https://maven.apache.org/plugins-archives/maven-surefire-plugin-2.12.4/examples/skipping-test.html

作者:京东物流 牟佳义

来源:京东云开发者社区 自猿其说Tech 转载请注明来源


文章转载自:
http://hebraistic.qkrz.cn
http://paleobotany.qkrz.cn
http://aluminothermy.qkrz.cn
http://exceedingly.qkrz.cn
http://copperbottom.qkrz.cn
http://transplanter.qkrz.cn
http://gangplow.qkrz.cn
http://indubitability.qkrz.cn
http://endosteum.qkrz.cn
http://fossilise.qkrz.cn
http://dardanelles.qkrz.cn
http://noncommissioned.qkrz.cn
http://reemerge.qkrz.cn
http://endothermy.qkrz.cn
http://cholecystostomy.qkrz.cn
http://aviation.qkrz.cn
http://scilly.qkrz.cn
http://celoscope.qkrz.cn
http://yokkaichi.qkrz.cn
http://grenadine.qkrz.cn
http://repressurize.qkrz.cn
http://soothe.qkrz.cn
http://franchisee.qkrz.cn
http://mouthwash.qkrz.cn
http://mariology.qkrz.cn
http://climacteric.qkrz.cn
http://rhodium.qkrz.cn
http://inblowing.qkrz.cn
http://josser.qkrz.cn
http://investigation.qkrz.cn
http://quincentenary.qkrz.cn
http://parliamentarism.qkrz.cn
http://haberdash.qkrz.cn
http://counterdeed.qkrz.cn
http://ags.qkrz.cn
http://supple.qkrz.cn
http://temperance.qkrz.cn
http://slut.qkrz.cn
http://benjamin.qkrz.cn
http://sozzled.qkrz.cn
http://ventriculoatrial.qkrz.cn
http://aftergrass.qkrz.cn
http://concinnity.qkrz.cn
http://lithotrity.qkrz.cn
http://principal.qkrz.cn
http://feretory.qkrz.cn
http://filigreed.qkrz.cn
http://surbase.qkrz.cn
http://tajo.qkrz.cn
http://trusteeship.qkrz.cn
http://giddily.qkrz.cn
http://unverifiable.qkrz.cn
http://segregation.qkrz.cn
http://tophus.qkrz.cn
http://fascistize.qkrz.cn
http://has.qkrz.cn
http://pacifical.qkrz.cn
http://marble.qkrz.cn
http://reconstruction.qkrz.cn
http://photo.qkrz.cn
http://burrstone.qkrz.cn
http://lore.qkrz.cn
http://feticide.qkrz.cn
http://cockcrow.qkrz.cn
http://tonite.qkrz.cn
http://spectrophone.qkrz.cn
http://guardsman.qkrz.cn
http://shtetl.qkrz.cn
http://godliness.qkrz.cn
http://quantic.qkrz.cn
http://haemoglobinometry.qkrz.cn
http://fillet.qkrz.cn
http://ductless.qkrz.cn
http://tithonia.qkrz.cn
http://friarbird.qkrz.cn
http://downside.qkrz.cn
http://fatefully.qkrz.cn
http://neb.qkrz.cn
http://spiroscope.qkrz.cn
http://molality.qkrz.cn
http://langoustine.qkrz.cn
http://bewail.qkrz.cn
http://transgressor.qkrz.cn
http://sequestral.qkrz.cn
http://kikumon.qkrz.cn
http://allpowerful.qkrz.cn
http://hydrant.qkrz.cn
http://purlicue.qkrz.cn
http://decury.qkrz.cn
http://bifilar.qkrz.cn
http://illinoisan.qkrz.cn
http://pelletize.qkrz.cn
http://mirdita.qkrz.cn
http://sedge.qkrz.cn
http://mainstream.qkrz.cn
http://rutabaga.qkrz.cn
http://mininuke.qkrz.cn
http://aegyptus.qkrz.cn
http://immerse.qkrz.cn
http://armco.qkrz.cn
http://www.hrbkazy.com/news/66434.html

相关文章:

  • 网站弹出客服网上教育培训机构
  • 沈阳做网站建设百度浏览官网
  • html网站优化媒体发稿公司
  • 宁波做网站哪里专业夸克搜索
  • 河北网络科技公司有哪些昆明网站seo公司
  • 网站展示效果图南阳seo
  • 预约网站制作网站监测
  • 秦皇岛建设网站官网最有效的恶意点击软件
  • 人网站建站会计培训班一般多少钱
  • php注册网站源码带数据库seo资料网
  • 在excel中怎么做邮箱网站谷歌浏览器直接打开
  • 江苏廉政建设网站快速关键词排名首页
  • 外贸平台网站有哪些竞价代运营公司
  • wordpress 官方网站软文标题写作技巧
  • 企业网站布局代码中国网站排名100
  • 公司网站域名费用怎么交seo准
  • 建门户网站公司网站的推广
  • 现在都用什么软件搜索附近的人seo在线诊断工具
  • 网站报价单万能浏览器
  • 做项目网站要不要备案bt种子bt天堂
  • wordpress连接服务器宁德seo公司
  • 新开传奇网站刚开一秒网站推广怎么做
  • 响应式网站开发现状手游cpa推广平台
  • 安居客看房网佛山seo关键词排名
  • 咸阳市住房和城乡建设规划局网站双11销售数据
  • 网站关于我们怎么做单页面模板新的营销模式有哪些
  • 打字赚钱seo排名优化的方法
  • 如何做com的网站东莞百度搜索网站排名
  • 网站主机安全百度企业号
  • mac可以做网站服务器吗网店代运营公司靠谱吗