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

教育网站图片soho个人可以建网站吗

教育网站图片,soho个人可以建网站吗,网站不允许上传文件,wordpress调整配置赞扬别人团建评论开发人员的测试工具箱就是其中之一#xff0c;很少保持不变。 可以肯定的是#xff0c;一些测试实践已被证明比其他测试更有价值#xff0c;但是#xff0c;我们仍在不断寻找更好#xff0c;更快和更具表现力的方法来测试我们的代码。 基于属性的测试 是 … 赞扬别人团建评论 开发人员的测试工具箱就是其中之一很少保持不变。 可以肯定的是一些测试实践已被证明比其他测试更有价值但是我们仍在不断寻找更好更快和更具表现力的方法来测试我们的代码。 基于属性的测试 是 Java社区中鲜为人知的 这是Haskell员工精心制作的另一种瑰宝并在QuickCheck论文中进行了介绍 。 Scala社区诞生了ScalaCheck库的Scala社区和许多其他组织很快意识到了这种测试技术的强大功能但是Java生态系统在相当长的一段时间内一直缺乏采用基于属性的测试的兴趣。 幸运的是自从jqwik出现以来情况就在慢慢变化 以求更好。 对于许多人来说很难掌握什么是基于属性的测试以及如何利用它。 杰西卡·克尔 Jessica Kerr的精彩演讲《基于属性的测试更好的代码》 以及有关基于属性的测试的简介基于 属性的测试模式系列的文章是吸引您的绝佳来源但是在今天的帖子中我们将尝试发现典型的Java开发人员使用jqwik进行的基于属性的测试的实践方面。 首先 基于属性的测试名称实际上意味着什么 每个Java开发人员首先想到的是它旨在测试所有的getter和setters您好100覆盖率吗 并非如此尽管对于某些数据结构而言可能很有用。 相反我们应该确定组件数据结构甚至单个功能的高级特性 并通过提出假设有效地对其进行检验。 我们的第一个示例属于“那里又回来”类别将序列化和反序列化为JSON表示形式。 被测试的类是User POJO 虽然很简单但请注意它具有OffsetDateTime类型的一个时间属性。 public class User { private String username; JsonFormat (pattern yyyy-MM-ddTHH:mm:ss[.SSS[SSS]]XXX , shape Shape.STRING) private OffsetDateTime created;     // ... } 令人惊讶的是由于所有人都在尝试使用自己的表示形式因此最近几天使用日期/时间属性进行操作会引起问题。 如您所见我们的合同使用的是ISO-8601互换格式带有可选的毫秒部分。 我们要确保的是可以将任何有效的User实例序列化为JSON 然后反序列化为Java对象而不会失去任何日期/时间精度。 作为练习让我们尝试首先用伪代码来表达它 For any user Serialize user instance to JSON Deserialize user instance back from JSON Two user instances must be identical 看起来很简单但令人惊讶的部分出在这里让我们看一下如何使用jqwik库将此伪代码投影到真实的测试用例中。 它尽可能地接近我们的伪代码。 Property void ForAll serdes( ForAll ( users ) User user) throws JsonProcessingException { final String json serdes.serialize(user); assertThat(serdes.deserialize(json)) .satisfies(other - { assertThat(user.getUsername()).isEqualTo(other.getUsername()); assertThat(user.getCreated().isEqual(other.getCreated())).isTrue(); });         Statistics.collect(user.getCreated().getOffset()); } 测试用例读起来很简单通常是自然的但是显然 jqwik的Property和ForAll批注后面隐藏着一些背景。 让我们从ForAll开始并清除所有这些User实例的来源。 您可能猜到了这些实例必须生成最好以随机方式生成。 对于大多数内置数据类型 jqwik具有一组丰富的数据提供程序 Arbitraries 但是由于我们要处理特定于应用程序的类因此我们必须提供自己的生成策略。 它应该能够发出具有广泛的用户名以及不同时区和偏移量集合的日期/时刻的User类实例。 首先让我们先略过提供者的实现然后再详细讨论。 Provide ArbitraryUser users() { final ArbitraryString usernames Arbitraries.strings().alpha().ofMaxLength( 64 );  final ArbitraryOffsetDateTime dates Arbitraries .of(List.copyOf(ZoneId.getAvailableZoneIds())) .flatMap(zone - Arbitraries .longs() .between(1266258398000L, 1897410427000L) // ~ /- 10 years .unique() .map(epochMilli - Instant.ofEpochMilli(epochMilli)) .map(instant - OffsetDateTime.from(instant.atZone(ZoneId.of(zone))))); return Combinators .combine(usernames, dates) .as((username, created) - new User(username).created(created)); } 用户名的来源很简单只是随机字符串。 日期的来源基本上可以是2010年到2030年之间的任何日期/时间而时区部分因此是偏移量是从所有可用的基于区域的区域标识符中随机选择的。 例如下面是jqwik提出的一些示例。 { username : zrAazzaDZ , created : 2020-05-06T01:36:07.49649603:00 } { username : AZztZaZZWAaNaqagPLzZiz , created : 2023-03-20T00:48:22.73773708:00 } { username : aazGZZzaoAAEAGZUIzaaDEm , created : 2019-03-12T08:22:12.65865804:00 } { username : Ezw , created : 2011-10-28T08:07:33.542542Z } { username : AFaAzaOLAZOjsZqlaZZixZaZzyZzxrda , created : 2022-07-09T14:04:20.84984902:00 } { username : aaYeZzkhAzAazJ , created : 2016-07-22T22:20:25.16216206:00 } { username : BzkoNGzBcaWcrDaaazzCZAaaPd , created : 2020-08-12T22:23:56.90290208:45 } { username : MazNzaTZZAEhXoz , created : 2027-09-26T17:12:34.87287211:00 } { username : zqZzZYamO , created : 2023-01-10T03:16:41.879879-03:00 } { username : GaaUazzldqGJZsqksRZuaNAqzANLAAlj , created : 2015-03-19T04:16:24.098098Z } ... 默认情况下 jqwik将针对1000套不同的参数值随机用户实例运行测试。 非常有用的“ 统计”容器允许收集您好奇的任何分布见解。 以防万一为什么不按区域偏移量收集分布呢 ... - 04 : 00 ( 94 ) : 9.40 % - 03 : 00 ( 76 ) : 7.60 % 02 : 00 ( 75 ) : 7.50 % - 05 : 00 ( 74 ) : 7.40 % 01 : 00 ( 72 ) : 7.20 % 03 : 00 ( 69 ) : 6.90 % Z ( 62 ) : 6.20 % - 06 : 00 ( 54 ) : 5.40 % 11 : 00 ( 42 ) : 4.20 % - 07 : 00 ( 39 ) : 3.90 % 08 : 00 ( 37 ) : 3.70 % 07 : 00 ( 34 ) : 3.40 % 10 : 00 ( 34 ) : 3.40 % 06 : 00 ( 26 ) : 2.60 % 12 : 00 ( 23 ) : 2.30 % 05 : 00 ( 23 ) : 2.30 % - 08 : 00 ( 20 ) : 2.00 % ... 让我们考虑另一个例子。 想象一下我们决定基于用户名属性重新实现User类的相等性在Java中这意味着重写equals和hashCode 。 这样对于任何一对User类实例以下不变量必须为true 如果两个User实例具有相同的用户名 则它们相等并且必须具有相同的哈希码 如果两个User实例具有不同的username 则它们不相等但哈希码不一定相同 它非常适合基于属性的测试并且jqwik尤其使这种测试的编写和维护变得微不足道。 Provide ArbitraryltString usernames() { return Arbitraries.strings().alpha().ofMaxLength( 64 ); } Property void equals( ForAll ( usernames ) String username, ForAll ( usernames ) String other) { Assume.that(!username.equals(other));         assertThat( new User(username)) .isEqualTo( new User(username)) .isNotEqualTo( new User(other)) .extracting(User::hashCode) .isEqualTo( new User(username).hashCode()); } 由于我们引入了用户名的两个来源因此通过假设表达的假设允许对生成的参数施加额外的约束这可能会发生因为它们在同一运行中都发出相同的用户名因此测试将失败。 您到目前为止可能遇到的问题是重点是什么 当然可以在不进行基于属性的测试和使用jqwik的情况下测试序列化/反序列化或equals / hashCode 那么为什么还要麻烦呢 足够公平但是这个问题的答案基本上深深在于我们如何进行软件系统的设计。 总体而言 基于属性的测试在很大程度上受函数式编程的影响这并不是Java的第一件事至少现在还不是这要轻描淡写地说。 随机生成测试数据本身并不是一个新颖的主意但是至少在我看来 基于属性的测试鼓励您去做的是以更抽象的角度思考而不是专注于单个操作等于比较加法。 排序序列化...但是它们要遵循什么样的属性特征定律和/或不变式。 当然这感觉就像是一种外来技术如果您愿意的话可以改变范式鼓励您花更多的时间设计正确的东西。 这并不意味着从现在开始您的所有测试都必须基于属性但是我相信它当然应该在我们的测试工具箱的前排位置。 请在Github上找到完整的项目资源。 翻译自: https://www.javacodegeeks.com/2020/02/in-praise-of-the-thoughful-design-how-property-based-testing-helps-me-to-be-a-better-developer.html赞扬别人团建评论
http://www.sadfv.cn/news/207116/

相关文章:

  • 乐清 网站建设石家庄信息门户网站定制
  • 电子商务网站建设的方法有哪些方面最新热搜新闻事件
  • 如何建设专题网站wordpress首页文章两列
  • 凡科网建站系统源码找人做网站排名优化
  • 各大网站代下单怎么做wordpress评论去掉网址
  • 国外中文网站排行岳阳公司网站制作
  • 傻瓜自助建站软件学做衣服的网站有哪些
  • 更好的网站制作朝阳网站搭建公司
  • 苏州虎丘区建设局网站个人静态网页制作
  • 网站前后台代码怎么做微网站推广
  • 单位网站建设费合同印花税工信部icp备案
  • 沈阳网站建设-中国互联dw网页制作使用方法
  • 做微信网站的职位徐州整站优化
  • 中国建设银行网站 个人客户黄骅港有什么好玩的
  • 网站建设 需要ae吗怎么在网站中添加百度商桥
  • 做问卷的网站删除域名 wordpress
  • 网站如何管理网站上不去的原因
  • 石家庄的网站开发公司外贸通道支持asp的网站吗
  • 标准网站是哪个开一个网站建设公司好
  • 鄱阳有做百度网站的网站批量修改
  • 校园网子网站建设管理意见或策划搜阅网站建设
  • 天水建设网站常州的网站建设
  • 新乡做网站的公司有那些sae wordpress 更新
  • 个人网站开发赚钱方向威海网站建设怎么样
  • 质量好网站建设加工网站开发 居易国际
  • wordpress超链接代码怎样建设网站优化
  • 网站降权是什么意思网站设计资料
  • 安全电子商务网站设计仿网站建设教程视频教程
  • 批量网站建设合作协议英德市住房城乡建设局网站
  • 广州的企业网站建设论文查重网站建设