网站建设的公司怎么收费自己做的网站怎么链接火车头采集

web/2025/9/30 6:28:47/文章来源:
网站建设的公司怎么收费,自己做的网站怎么链接火车头采集,wordpress调用指定文章id,建网站 赚钱oppo人岗匹配测评我们被迫在测试代码中写太多断言行的日子已经一去不复返了。 镇上有一个新的警长#xff1a;assertThat和他的代理人#xff1a;匹配者。 好吧#xff0c;这不是什么新东西#xff0c;但是无论如何#xff0c;我想向您介绍匹配器的使用方式#xff0c;然… oppo人岗匹配测评 我们被迫在测试代码中写太多断言行的日子已经一去不复返了。 镇上有一个新的警长assertThat和他的代理人匹配者。 好吧这不是什么新东西但是无论如何我想向您介绍匹配器的使用方式然后对匹配器概念进行扩展我发现在为我的代码开发单元测试时匹配器概念非常有用。 首先我将介绍匹配器的基本用法。 当然您可以直接从其作者那里完整地了解hamcrest匹配器功能 https://code.google.com/p/hamcrest/wiki/Tutorial 。 基本上匹配器是定义两个对象何时匹配的对象。 通常第一个问题是您为什么不使用等于 好吧有时您不想在它们的所有字段上都匹配两个对象而只是在其中的某些字段上匹配如果您使用旧代码则会发现equals实现不存在或不符合您的预期。 另一个原因是使用assertThat为您提供了一种更加一致的“断言”方法并且可以说是更具可读性的代码。 因此例如而不是编写 int expected, actual; assertEquals(expected, actual); 你会写 assertThat(expected, is(actual)); 其中“ is”是静态导入的org.hamcrest.core.Is.is 并没有太大的区别……。 但是Hamcrest为您提供了许多非常有用的匹配器 对于数组和映射hasItemhasKeyhasValue 数字closeTo –一种指定相等性的方法其边距误差大于大于小于… 对象nullValuesameInstance 现在我们正在取得进步……Hamcrest匹配器的功能仍然是您可以为对象编写自己的匹配器。 您只需要扩展BaseMatcher T类。 这是一个简单的自定义匹配器的示例 public class OrderMatcher extends BaseMatcherOrder {private final Order expected;private final StringBuilder errors new StringBuilder();private OrderMatcher(Order expected) {this.expected expected;}Overridepublic boolean matches(Object item) {if (!(item instanceof Order)) {errors.append(received item is not of Order type);return false;}Order actual (Order) item;if (actual.getQuantity() ! (expected.getQuantity())) {errors.append(received item had quantity ).append(actual.getQuantity()).append(. Expected ).append(expected.getQuantity());return false;}return true;}Overridepublic void describeTo(Description description) {description.appendText(errors.toString());}Factorypublic static OrderMatcher isOrder(Order expected) {return new OrderMatcher(expected);} } 与旧的断言方法相比这是一个全新的联盟。 因此这简而言之就是Hamcrest的匹配器的用法。 但是当我开始在现实生活中使用它时尤其是在使用遗留代码时我意识到故事还有很多。 这是使用匹配器时遇到的一些问题 匹配器的结构可能非常重复且无聊。 我需要一种将DRY原理应用于匹配器代码的方法。 我需要一种统一的方式来访问匹配器。 默认情况下框架应选择正确的匹配器。 我需要比较引用了另一个对象的对象这些对象应该已经与匹配器进行了比较对象引用可以根据需要进行深入处理 我需要使用匹配器检查对象集合而无需迭代该集合也可以使用数组匹配器…但我想要更多的J 我需要一个更灵活的匹配器。 例如对于同一个对象我需要检查一组字段但在另一种情况下则需要检查另一组。 开箱即用的解决方案是为每种情况配备一个匹配器。 不喜欢那样 我使用了一些约定知道了要应用哪个匹配器以及要比较或忽略哪个字段的匹配器层次结构克服了这些问题。 此层次结构的根是扩展BaseMatcher T的RootMatcher T。 为了处理1问题重复代码RootMatcher类包含所有匹配器的通用代码例如用于检查实际值是否为null或与预期对象具有相同类型甚至是相同类型的方法。同一实例 public boolean checkIdentityType(Object received) {if (received expected) {return true;}if (received null || expected null) {return false;}if (!checkType(received)){return false;}return true;}private boolean checkType(Object received) {if (checkType !getClass(received).equals(getClass(expected))) {error.append(Expected ).append(expected.getClass()).append( Received : ).append(received.getClass());return false;}return true;} 这将简化匹配器的编写方式我不必考虑null或恒等角情况 所有这些都在根类中解决了。 预期的对象和错误也位于根类中 public abstract class RootMatcher extends BaseMatcher {protected T expected;protected StringBuilder error new StringBuilder([Matcher : this.getClass().getName() ] ); 这样您可以在扩展RootMatcher之后立即进入match方法的实现而对于错误只需将消息放入StringBuilder中即可。 RootMatcher将处理将它们发送到JUnit框架以呈现给用户的情况。 对于问题2自动查找匹配项解决方案采用其工厂方法 Factorypublic static Matcher is(Object expected) {return getMatcher(expected, true);}public static RootMatcher getMatcher(Object expected, boolean checkType) {try {Class matcherClass Class.forName(expected.getClass().getName() Matcher);Constructor constructor matcherClass.getConstructor(expected.getClass());return (RootMatcher) constructor.newInstance(expected);} catch (ClassNotFoundException | NoSuchMethodException | InvocationTargetException | InstantiationException | IllegalAccessException e) {}return (RootMatcher) new EqualMatcher(expected);} 如您所见factory方法尝试使用两种约定来找出应该返回哪个匹配器 对象的匹配器具有对象名称字符串Matcher 匹配器与要匹配的对象位于同一包中建议位于同一包中但在测试目录中 使用此策略我成功使用了一个匹配器RootMatcher.is它将为我提供所需的确切匹配器 为了解决对象关系第3个问题的递归性质在检查对象字段时我使用了RootManager中的方法来检查将使用匹配器的相等性 public boolean checkEquality(Object expected, Object received) {String result checkEqualityAndReturnError(expected, received);return result null || result.trim().isEmpty();}public String checkEqualityAndReturnError(Object expected, Object received) {if (isIgnoreObject(expected)) {return null;}if (expected null received null) {return null;}if (expected null || received null) {return Expected or received is null and the other is not: expected expected received received;}RootMatcher matcher getMatcher(expected);boolean result matcher.matches(received);if (result) {return null;} else {StringBuilder sb new StringBuilder();matcher.describeTo(sb);return sb.toString();}} 但是关于集合问题4呢 为了解决这个问题您要做的就是为扩展RootMatcher的集合实现匹配器。 因此唯一剩下的问题是5使匹配器更加灵活能够告诉匹配器它应该忽略哪个字段以及应该考虑哪个字段。 为此我介绍了“ ignoreObject”的概念。 当匹配器在模板预期对象中找到对其的引用时该对象将忽略该对象。 它是如何工作的 首先在RootMatcher中我提供了用于返回任何Java类型的ignore对象的方法 private final static Map ignorable new HashMap();static {ignorable.put(String.class, %%%%IGNORE_ME%%%%);ignorable.put(Integer.class, new Integer(Integer.MAX_VALUE - 1));ignorable.put(Long.class, new Long(Long.MAX_VALUE - 1));ignorable.put(Float.class, new Float(Float.MAX_VALUE - 1));}/*** we will ignore mock objects in matchers*/private boolean isIgnoreObject(Object object) {if (object null) {return false;}Object ignObject ignorable.get(object.getClass());if (ignObject ! null) {return ignObject.equals(object);}return Mockito.mockingDetails(object).isMock();}SuppressWarnings(unchecked)public static M getIgnoreObject(Class clazz) {Object obj ignorable.get(clazz);if (obj ! null) {return (M) obj;}return (M) Mockito.mock(clazz);}SuppressWarnings(unchecked)public static M getIgnoreObject(Object obj) {return (M) getIgnoreObject(obj.getClass());} 如您所见被忽略的对象将是被模拟的对象。 但是对于无法模拟的类最终类我提供了一些不太可能出现的任意固定值可以对J进行改进。 为此开发人员必须使用RootMatcher中提供的equals方法checkEqualityAndReturnError它将检查是否忽略了对象。 使用我去年提出的这种策略和构建器模式 http://www.javaadvent.com/2012/12/using-builder-pattern-in-junit-tests.html 我可以轻松地对复杂的结构做出断言目的 import static […]RootMatcher.is; Order expected OrderBuilder.anOrder().withQuantity(2).withTimestamp(RootManager.getIgnoredObject(Long.class)).withDescription(“specific description”).build() assertThat(order, is(expected); 如您所见我可以轻松地指定应忽略时间戳记这使我可以将同一匹配器与要验证的一组完全不同的字段一起使用。 确实此策略需要进行大量准备从而使所有构建者和匹配者都受益。 但是如果我们要拥有经过测试的代码并且要使测试成为主要关注应涵盖的测试流程的工作那么我们需要这样的基础和这些工具来帮助我们轻松地建立前提条件和建立我们的预期状态。 当然可以使用注释来改进实现但是核心概念仍然存在。 我希望本文能帮助您改善测试风格如果有足够的兴趣我会尽力将完整的代码放在公共存储库中。 谢谢。 参考来自Java日历日历博客的JCG合作伙伴 Stefan Bulzan 在测试中使用匹配器 。 翻译自: https://www.javacodegeeks.com/2013/12/using-matchers-in-tests.htmloppo人岗匹配测评

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/84304.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络优化seo招聘优化搜索引擎

在《asp.net core认证与授权》中讲解了固定和自定义角色授权系统权限,其实我们还可以通过其他方式来授权,比如可以通过角色组,用户名,生日等,但这些主要取决于ClaimTypes,其实我们也可以自定义键值来授权&a…

贵金属企业网站源码宣传网站开发

一、函数指针 1、定义 顾名思义,函数指针就是函数的指针。它是一个指针,属于一个数据类型,其指向一个函数。如定义一个函数,其入口地址就是这个函数的指针,是个常量,可以用该常量给函数指针类型的变量赋值&…

网站开发语言识别北京优秀的网站建设公司

python缓冲区When people who speak different languages get together and talk, they try to use a language that everyone in the group understands. 当说不同语言的人聚在一起聊天时,他们会尝试使用小组中每个人都能理解的语言。 To achieve this, everyone …

合肥网站设计公司怎样让百度搜不到自己的网站

一、NLP是什么 自然语言处理( Natural Language Processing, NLP)是计算机科学领域与人工智能领域中的一个重要方向,也就是人们常说的「自然语言处理」,就是研究如何让计算机读懂人类语言,即将人的自然语言转换为计算机可以阅读的指令。它研…

盐城集团网站建设南通网站排名优化

大模型背后的范式 整个预训练语言模型的使用范式: 对于预训练模型,最核心的要素是从无标注的数据中去学习,通过自监督的一些任务去做预训练,得到丰富的知识。在具体的应用中,会引入一些任务相关的数据,去调…

米各庄网站建设遂宁模板建站公司

maven:编译出现Process terminated解决方法(超全) 一. 情况一:配置文件 settings. xml 出错(解决方法1)1.1 项目编译报错如下:1.2 点击【项目名】提示找到出错文件1.3 点击查看出错文件1.4 原因及解决办法 …

制作网页的网站有哪些建设银行网站连不上

今天又学会了一个知识,加油! 目录 一、基带信号与宽带信号 1、基带信号 2、宽带信号 3、选择 4、关系 二、数字数据编码为数字信号 1、非归零编码【NRZ】 2、曼彻斯特编码 3、差分曼彻斯特编码 4、归零编码【RZ】 5、反向不归零编码【NRZI】 …

大学网页制作与网站建设开通网站需要什么手续

文章首发地址 为了解决在云原生环境中,Java应用启动慢的问题,出现了很多派系,如拯救派,让应用在原有基础上启动更快(一般都是用资源换时间),还有就是革命派,Java向Golang学习&#x…

三亚网站建设公司移动网站建设是什么意思

安卓工具箱专业版是款集所有功能于一身的工具箱!包括硬件和软件和工具,您的手机使用的信息。非常容易使用,具有非常用户友好的用户界面。 主要功能: 1。硬件信息:CPU核心,CPU类型,内存信息&…

胡芦娃app软件下载网站前端开发工具哪个好

Linux——权限的理解 文章目录 Linux——权限的理解一、shell命令以及运行原理二、Linux权限的概念切换用户对指令提权 三、Linux权限管理1. 文件访问者的分类(人)2. 文件类型和访问权限(事物属性)文件类型基本权限文件权限值的表…

手机网站开发步骤网站建设的基本技术

泛型 基本概念为什么我们需要泛型泛型类型泛型类简单泛型类多元泛型类 泛型接口泛型方法为什么要使用泛型方法呢?使用方法 泛型的上下限上限下限加点难度的例子例子一例子二例子三 泛型数组深入理解泛型什么是泛型擦除后保留的原始类型泛型类型擦除原则如何进行擦除的?怎么证…

网站建设教程培训中国十大经典广告

1. 请自我介绍一下(需简单清楚的表述自已的基本情况,在这过程中要展现出自信,对工作有激情,上进,好学) 面试官您好,我叫###,今年26岁,来自江西九江,就读专业是电子商务,毕…

素材网站下载专做智能化施工的网站

背景 随着酒店业务的高速发展,我们为用户、商家提供的服务越来越精细,系统服务化程度、复杂度也逐渐上升。微服务化虽然能够很好地解决问题,但也有副作用,比如,问题定位。 每次问题定位都需要从源头开始找同事帮我人肉…

各大网站网址奉贤做网站的

apache shiro 反序列化漏洞解决方案 反序列化漏洞解决方案产生原因解决方案1:1.升级shiro至最新版本1.7.1解决方案2:修改rememberMe默认密钥,生成随机密钥。 反序列化漏洞解决方案 反序列化漏洞介绍 序列化:把对象转换为字符串或…

网站照片要求南阳企业网站推广方法

一:Settings一级菜单 1、AndroidManifest.xml 每个APP对应都有一个AndroidManifest.xml,从该文件入手分析最为合适。 packages/apps/Settings/AndroidManifest.xml 根据<category android:name="android.intent.category.LAUNCHER" />可找到当前当前APP a…

聊城网站建设公司电话商城购物网站开发意义

前言 在上一章节中我们用W5500-EVB-PICO通过dhcp获取ip地址&#xff08;网关&#xff0c;子网掩码&#xff0c;dns服务器&#xff09;等信息&#xff0c;给我们的开发板配置网络信息&#xff0c;成功的接入网络中&#xff0c;那么本章将教大家如何让我们的开发板进行DNS域名解析…

密云做网站的中国建行官网首页

Kafka_04_Topic和日志 Topic/PartitionTopicPartition 日志存储存储格式日志清理删除压缩 Topic/Partition Topic/Partition: Kafka中消息管理的基础单位 Topic和Partition并不实际存在(仅逻辑上的概念) 如: Topic和Partition关系 // 每个日志文件可对应多个日志分段, 其还可…

建立个人网站主题新中式装修风格效果图

最近遇到一个python的小数的问题&#xff0c;本来应该很简单的小于判断&#xff0c;无论如何都不正确&#xff0c;而且浮点小数都没问题&#xff0c;但decimal小数有问题&#xff0c;给我整蒙了&#xff0c;后来才发现是对decimal不了解所致&#xff0c;如果你还用float转decim…

网站管理建设落实报告wordpress register

问题描述&#xff1a;vue3项目的页面A跳转到页面B时&#xff0c;页面B页面是空白的&#xff0c;需要手动刷新一下才能恢复正常&#xff0c;在页面A中用iframe引入了别的网站&#xff08;后续事实证明&#xff0c;跟iframe没一毛钱的关系&#xff09;。着急的童鞋可以直接拉到底…

工信部网站备案查询步骤详解五合一免费建站

1 赛题思路 (赛题出来以后第一时间在群内分享&#xff0c;点击下方群名片即可加群) 2 比赛日期和时间 报名截止时间&#xff1a;2024年4月11日&#xff08;周四&#xff09;12:00 比赛开始时间&#xff1a;2024年4月12日&#xff08;周五&#xff09;8:00 比赛结束时间&…