百年铁木,寻有缘人!微信:18077095366
时间:2022-04-25 00:13
人气:
作者:admin
TestableMock是如前所述源标识符和二进制码进一步增强的Java程序标识符辅助基本操作,包涵下列机能:
出访被测类专有核心成员:使程序标识符能间接调用和出访被测类的专有核心成员,化解专有核心成员调用和专有方式试验的难题加速Mock任一调用:使被测类的任一方式调用加速代替为Mock方式,实现"指哪换哪",化解传统Mock基本操作采用繁琐的难题辅助试验void方式:利用Mock奇偶校验器对方式的内部逻辑展开检查,化解无codice方式无法实施程序标识符的难题如今关于专有方式是否应该做程序标识符的争论正逐渐停息,开发人员的普遍实践已经给出事实答案。通过公有方式间接测专有方式在很多情况下无法展开,开发人员们更愿意通过修正方式可见性的办法来让原先专有的方式在试验示例中变得可测。
此外,在程序标识符中时常会需要对被测第一类展开特定的核心成员表头调用,但有时由于被测类的构造方式限制,使得无法便捷的对这些表头展开赋值。那么,能否在不破坏被测类别PCB的情况下,容许程序标识符示例内的标识符间接出访被测类的专有方式和核心成员表头呢?TestableMock提供了两种简单的化解方案。
只需为试验类添加@EnablePrivateAccess注释,即可在试验示例中赢得下列进一步增强能力:
调用被测类的专有方式(主要包括动态方式)加载被测类的专有表头(主要包括动态表头)修正被测类的专有表头(主要包括动态表头)修正被测类的自变量表头(采用final修饰的表头,主要包括动态表头)出访和修正专有、自变量核心成员时,IDE可能会提示语法有误,但C++将能够正常运转试验。(采用编译期标识符进一步增强,目前仅实现了Java词汇的网络连接)
效果见java-demo实例项目DemoPrivateAccessTest试验类中的示例。
若不期望看到IDE的错别字提醒,或是在非Java词汇的JVM工程(譬如Kotlin词汇)里,也能借助PrivateAccessor基本操作Canillac间接出访专有核心成员。
这个类提供了6个动态方式:
PrivateAccessor.get(被测第一类, "专有表头名")➜ 加载被测类的专有表头PrivateAccessor.set(被测第一类, "专有表头名", 捷伊值)➜ 修正被测类的专有表头(或自变量表头)PrivateAccessor.invoke(被测第一类, "专有方式名", 调用模块..)➜ 调用被测类的专有方式PrivateAccessor.getStatic(被测类别, "专有动态表头名")➜ 加载被测类的动态专有表头PrivateAccessor.setStatic(被测类别, "专有动态表头名", 捷伊值)➜ 修正被测类的动态专有表头(或动态自变量表头)PrivateAccessor.invokeStatic(被测类别, "专有动态方式名", 调用模块..)➜ 调用被测类的动态专有方式相比以往Mock基本操作以类为发射率的Mock方式,TestableMock容许用户间接表述需要Mock的单个方式,并遵循签订合同优于配置的原则,按照规则手动在试验运转时代替被测方式中的指定方式调用。
简而言之就两条:具体的Mock方式表述签订合同如下表所示:
在试验类里表述两个有@MockMethod注释的普通方式,使它与需抹除的方式名称、模块、codice类别完全一致,然后在其模块条目第一位再减少两个类别为该方式原先所属第一类类别的模块。
此时被测类中所有对该需抹除方式的调用,将在程序标识符运转时,将手动被代替为对上述自表述Mock方式的调用。
注意:当遇到待抹除方式有下文时,能将需抹除的方式名写到@MockMethod注释的targetMethod模块里,这样Mock方式自身就能随便命名了。
例如,被测类中有一处"anything".substring(1, 2)调用,我们期望在运转试验的时候将它改成两个固定字符串,则只需在试验类表述如下表所示方式:
下面这个例子展示了targetMethod模块的用法,其效果与上述实例相同:
完整标识符实例见java-demo和kotlin-demo实例项目中的should_able_to_mock_common_method()试验示例。(由于Kotlin对String类别展开了魔改,故Kotlin实例中将被测方式在BlackBox类里加了一层PCB)
有时候,在对某些方式展开试验时,期望将被测类自身的另外一些核心成员方式Mock掉。
操作方式与前一种情况相同,Mock方式的第两个模块类别需与被测类相同,即可实现对被测类自身(不论是公有或专有)核心成员方式的抹除。
例如,被测类中有两个亲笔签名为String innerFunc(String)的专有方式,我们期望在试验的时候将它代替掉,则只需在试验类表述如下表所示方式:
对于动态方式的Mock与普通方式相同。但需要注意的是,动态方式的Mock方式被调用时,传入的第两个模块实际值始终是null。
例如,在被测类中调用了BlackBox类别中的动态方式secretBox(),改方式亲笔签名为BlackBox secretBox(),则Mock方式如下表所示:
完整标识符实例见java-demo和kotlin-demo实例项目中的should_able_to_mock_static_method()试验示例。
如何对void类别的方式展开试验一直是许多程序标识符框架在悄悄回避的话题,由于以往的程序标识符手段主要是对被测单元的返回结果展开奇偶校验,当遇到方式没有codice时就会变得无从下手。
从机能的角度来说,虽然void方式不返回任何值,但它的执行一定会对外界产生某些潜在影响,我们将其称为方式的"副作用",比如:
调用某些外部变量(专有核心成员变量或者全局动态变量)在方式体内对外部第一类实例展开赋值输出了日志调用了其他外部方式… …不返回任何值也不产生任何"副作用"的方式没有存在的意义。这些"副作用"的本质归纳来说可分为两类:修正外部变量和调用外部方式。
通过TestableMock的专有表头出访和Mock奇偶校验器能很方便的实现对"副作用"的结果检查。
例如,下面这个方式会根据输入修正专有核心成员变量hashCache:
若要试验此方式,能利用TestableMock间接加载专有核心成员变量的值,对结果展开奇偶校验:
例如,下面这个方式会根据输入打印信息到控制台:
若要试验此方式,能利用TestableMock加速Mock掉System.out.println方式。在Mock方式体里能继续执行原调用(相当于并不影响本来方式机能,仅用于做调用记录),也能间接留空(相当于去除了原方式的副作用)。
在执行完被测的void类别方式以后,用InvokeVerifier.verify()奇偶校验传入的打印内容是否符合预期:
开放源码地址:Gitee 极速下载/TestableMock
强大,10k+点赞的 SpringBoot 后台管理系统竟然出了详细教程!
分享一套如前所述SpringBoot和Vue的企业级中后台开放源码项目,标识符很规范!
能挣钱的,开放源码 SpringBoot 商城系统,机能超全,超漂亮!
我的世界_新武器新动作游戏,四处是要积极探索的新军用物资,不必害怕无趣了
Copyright © 2002-2021 真越铁木砧板网 版权所有
备案号:桂ICP备2021004354号-1
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。