栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Mockito 2.2中,我用什么代替Whitebox来设置字段?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Mockito 2.2中,我用什么代替Whitebox来设置字段?

请注意,

Whitebox
它始终在
org.mockito.internal
包装中。除了增加主版本号外,还可以
internal
指定该软件包可能会发生重大更改。

如果您确实希望在测试中设置否则无法访问的字段,则可以采用与之相同的方法

setInternalState
,即仅在层次结构中标识该字段,对其进行调用
setAccessible
,然后进行设置。完整代码在greppre上。您还可以检查多种其他方法来设置测试中的不可访问状态。

public static void setInternalState(Object target, String field, Object value) {    Class<?> c = target.getClass();    try {        Field f = getFieldFromHierarchy(c, field);  // Checks superclasses.        f.setAccessible(true);        f.set(target, value);    } catch (Exception e) {        throw new RuntimeException( "Unable to set internal state on a private field. [...]", e);    }}

但是, 在这种情况下,我的一般建议是 停止使用这些工具
:Java的四个封装级别(公共,受保护,程序包,私有)不一定足以表达您要表达的保护程度,并且在尝试进行反思时,添加记录良好的初始化方法或构造函数重写来覆盖依赖关系通常要容易得多。如果将测试与所测试的类放在同一Java包中,则通常甚至可以将字段或方法/构造函数包设为私有,这也是设置并行源文件夹

src
tests
(表示)两个文件夹的好理由同一Java包的一半。

尽管有些人将这种额外的方法或构造函数视为“ API污染”,但我认为它是按照类中最重要的使用者之一的要求(即 自己的测试)进行
编码。如果您需要原始的外部接口,则可以轻松地单独定义一个接口,以便隐藏所需的任何细节。但是,您可能会发现自己 喜欢
将任何实际或模拟的实现直接注入到您现在更灵活的组件中的能力,此时,您可能希望研究依赖项注入模式或框架。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/370861.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号