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

云存储能用来做网站吗/网站推广方案有哪些

云存储能用来做网站吗,网站推广方案有哪些,网站开发完后部署到网上,wordpress防止cc攻击关于 Mockito BDDMockito前言Mockito BDDMockitomockstubmatcherinorderconsecutiveanswerspyoneLinerStubs总结前言 向很多开源社区提交代码是需要做完整的 单元测试 的,其中 mock 目标实例、给 mock 对象打桩 等操作可以极大提高测试代码的效率和可读性 本章节基…

关于 Mockito BDDMockito

  • 前言
  • Mockito BDDMockito
    • mock
    • stub
    • matcher
    • inorder
    • consecutive
    • answer
    • spy
    • oneLinerStubs
  • 总结

前言

向很多开源社区提交代码是需要做完整的 单元测试 的,其中 mock 目标实例、给 mock 对象打桩 等操作可以极大提高测试代码的效率和可读性

本章节基于 Mockito BDDMockitoAPI DEMO 熟悉一些基本操作,Spring Test 包含对应依赖

Mockito BDDMockito

其中 BDD 代表 behavior driven deployment,我理解就是让测试代码语义更接近现实行为,比如

  • given 就是 给定 ... 条件下,可以类比为 打桩(当然也可以不打)
  • when 就是 发生 ... 行为,比如 mock 实例的方法调用(当然也可以不发生)
  • then,就是 则 ...打桩mock 实例执行目标方法后的校验
语义化的东西强行解释总感觉生硬

mock

	@Testpublic void mockDemo() {List mock = mock(List.class);mock.add("test");mock.add("test1");mock.add("test1");mock.get(0);// verify:是否调用目标方法verify(mock).add("test");// BDD stylethen(mock).should().add("test");// 目标方法调用一次verify(mock, times(1)).add("test");then(mock).should(times(1)).add("test");// 目标方法至少调用 2 次verify(mock, atLeast(2)).add("test1");then(mock).should(atLeast(2)).add("test1");// 目标方法最多调用 2 次verify(mock, atMost(2)).add("test1");then(mock).should(atMost(2)).add("test1");// 目标方法未调用verify(mock, never()).add("test2");then(mock).should(never()).add("test2");// errorverify(mock).add("test2");verify(mock).get(1);}
  • mock 方法创建 mock 对象,即一个临时虚拟对象,测试基于该示例进行
  • verifyMockito 下的 API,类似于断言,比如 verify(mock).add("test") 就是检验该方法是否调用
  • thenBDDMockitoAPI,类比于 verify 更加语义化

stub

	@Testpublic void stubDemo() {ArrayList mock = mock(ArrayList.class);// 打桩when(mock.get(0)).thenReturn("a");// BDD-stylegiven(mock.get(0)).willReturn("a");when(mock.get(1)).thenThrow(new RuntimeException("test"));// given(mock.get(1)).willThrow(new RuntimeException("test"));doThrow(new RuntimeException("void")).when(mock).clear();// willThrow(new RuntimeException("void")).given(mock).clear();System.out.println(mock.get(0));try {mock.get(1);} catch (Exception e) {System.out.println(e.getMessage());}System.out.println(mock.get(2));}
  • 这是一段 stub 代码,即打桩操作,主要应付方法逻辑复杂且非测试目标的场景
  • 对应的 Mockito APIwhen ... then ...
  • 对应的 BDDMockitothen ... will ...

matcher

	@Testpublic void matcherDemo() {ArrayList mock = mock(ArrayList.class);// 匹配任意 intwhen(mock.get(anyInt())).thenReturn("meta");given(mock.get(anyInt())).willReturn("meta");// 所有的方法都要使用 matcherwhen(mock.subList(anyInt(), eq(1))).thenReturn(new ArrayList() {{add("meta2");}});given(mock.subList(anyInt(), eq(1))).willReturn(new ArrayList() {{add("meta2");}});System.out.println(mock.get(12));System.out.println(mock.subList(3, 1));// then 阶段也可以使用verify(mock).get(anyInt());then(mock).should().get(anyInt());}
  • 可以对参数进行匹配,比如 anyInt() 匹配任意 Integer
  • 这个针对 Mockito BDDMockito 都一样
  • 自然语义下的 then 阶段也可以使用 matcher 来匹配
我指的自然语义就是 given ... when ... then ...

inorder

	@Testpublic void orderDemo() {ArrayList mock = mock(ArrayList.class);LinkedList mock2 = mock(LinkedList.class);mock.add(1);mock.add(2);mock2.add(1);mock2.add(2);// 可以有多个实例InOrder inOrder = inOrder(mock, mock2);inOrder.verify(mock).add(1);inOrder.verify(mock).add(2);// correct,可以跳过// inOrder.verify(mock2).add(2);inOrder.verify(mock2).add(1);// BDD-stylethen(mock2).should(inOrder).add(2);// errorinOrder.verify(mock).add(1);}
  • 这段代码可以测试 mock 实例的方法执行顺序是否符合预期
  • 可以多个实例、多个方法结合使用,可看 demo 理解
  • 顺序前后符合即可,可以不严格,即 1 2 3 4 可以是 1 2 41 3 4 但不可以 2 1 3 4

consecutive

	@Testpublic void consecutiveDemo() {ArrayList mock = mock(ArrayList.class);when(mock.get(anyInt())).thenReturn(0, 1, 2);// 0System.out.println(mock.get(0));// 1System.out.println(mock.get(1));// 2System.out.println(mock.get(2));// 2System.out.println(mock.get(3));// 清空reset(mock);System.out.println(mock.get(0));}
  • 打桩 的结果可以指定多个,会依此返回
  • 如果没有其他结果,则保持最后一个
  • reset 可情况 mock 实例在自然语义 givenwhen 阶段下的所有行为

answer

	@Testpublic void answerDemo() {ArrayList mock = mock(ArrayList.class);when(mock.get(anyInt())).then(invocation -> {Object argument = invocation.getArgument(0);return argument + "r";});// BDD-stylegiven(mock.get(anyInt())).will(invocationOnMock -> {Object argument = invocationOnMock.getArgument(0);return argument + "r";});System.out.println(mock.get(0));System.out.println(mock.get(1));}
  • 打桩 结果指定更加灵活的 Answer
  • 示例中是基于 lambda 风格的实现

spy

	@Testpublic void spyDemo() {List list = new LinkedList();List spy = spy(list);spy.add(1);when(spy.size()).thenReturn(10);// BDD-stylegiven(spy.size()).willReturn(10);System.out.println(spy.get(0));System.out.println(spy.size());// spy 只是一个 copy,所以 list 上的操作不影响 spylist.add(2);spy.forEach(System.out::println);}
  • spy 方法可返回一个 spy 实例,该实例除了 打桩 行为外的调用都与原实例相同,比如示例中 spy.add(1) 方法就是正常的 ArrayList::add,而 spy.size() 因为被 stub 只返回 10
  • 值得注意的是,原对象上的操作并不影响 spy 示例,比如示例中 list.add(2) 并不意味着 spy.get(1) == 2

oneLinerStubs

	@Testpublic void oneLinerStubsDemo() {HelloService helloService = when(mock(HelloService.class).hello()).thenReturn("hello world").getMock();// BDD-styleHelloService helloService2 = given(mock(HelloService.class).hello()).willReturn("hello world 2").getMock();System.out.println(helloService.hello());System.out.println(helloService2.hello());}
  • 一行式 demo
  • getMock 方法返回 mock 实例

总结

本文介绍一些基于 Mockito BDDMockitoDEMO,旨在写出实用又好看的 单元测试

完整示例 demo

http://www.jmfq.cn/news/5236543.html

相关文章:

  • 鞍山 中企动力提供网站建设/深圳网络推广大师
  • 无忧网站建设服务/邯郸今日头条最新消息
  • wordpress 首页欢迎/seo综合优化公司
  • 学校定制网站建设公司/网站关键词排名seo
  • 专做零食的网站/杭州百度快照优化排名
  • 网站开发有哪些语言/seo综合查询什么意思
  • 给别人做的网站涉及到诈骗/怎样申请网站
  • wordpress网站的CDN设置/齐三seo顾问
  • 建设网站计划书/百度推广登录平台
  • 学校网站建设的技术方案/北京seo包年
  • 西宁公司官方网站建设/搜狗搜索网页版
  • 免费制作网络商城网站/百度空间登录入口
  • 网页设计制作图片代码/免费seo快速排名系统
  • 怎么用别人网站做模板/百度经验首页登录官网
  • 怎么介绍自己做的静态网站/深圳seo优化外包公司
  • 吉安做网站的公司/短视频推广策略
  • 南宁营销型网站建设公司哪家好/最新足球消息
  • 长沙网站建设zh68/优化师培训机构
  • 淘宝网站用什么语言做的/武汉大学人民医院洪山院区
  • 免费的网站推广怎么做效果好/寰宇seo
  • 网上商城可行性分析报告/四川最好的网络优化公司
  • 北京+网站建设/全国广告投放平台
  • soho建网站 必须先注册公司吗/长沙全网推广
  • 优化免费网站建设/白山seo
  • 东莞市镇街建设项目监理招标网站/百度seo关键词排名价格
  • 微网站和app的区别/湖南网络优化服务
  • 网站建设风险怎样规避/淘宝客推广
  • 做淘宝客的网站怎么备案/时事政治2023最新热点事件
  • 常州微信网站建设方案/seo优化公司
  • 网站开发工程师能在家工作吗/自己怎么优化网站排名