Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在单元测试中使用反射是不好的做法吗?

在单元测试中使用反射是不好的做法吗?

提问于 2018-03-05 21:37:10
回答 2关注 0查看 524

在过去的几年中,我一直认为在Java中,反射在单元测试中被广泛使用。由于一些必须检查的变量/方法是私人的,因此需要读取它们的值。我一直认为Reflection API也用于此目的。

上周我必须测试一些软件包,因此编写一些JUnit测试。与往常一样,我使用Reflection来访问私人字段和方法。但是,我的主管检查了代码并不满意,并告诉我反射API并非用于这种“黑客行为”。相反,他建议修改生产代码中的可见性。

使用Reflection是否真的是不好的做法?我无法相信 -

回答 2

tthha

回答已采纳

发布于 2018-03-06 06:31:56

恕我直言反射应该只是最后的手段,保留为单元测试遗留代码的特殊情况或API你不能改变。如果您正在测试自己的代码,那么您需要使用Reflection的事实意味着您的设计不可测试,因此您应该修复该问题而不是诉诸Reflection。

如果你需要在你的单元测试中访问私有成员,它通常意味着有问题的类有不合适的接口,并且/或者尝试做太多。所以要么修改它的接口,要么将一些代码提取到一个单独的类中,在那里可以公开那些有问题的方法/字段访问器。

请注意,通常使用反射会导致代码除了更难理解和维护外,还更脆弱。在正常情况下,会有一整套错误被编译器检测到,但使用Reflection时,它们只会出现运行时异常。

炳洪x5

发布于 2018-03-06 07:09:14

仅仅为了测试而修改生产API的可见性是非常糟糕的。出于正当理由,该可见度很可能会设置为当前值,并且不会更改。

使用反射来进行单元测试基本上没问题。当然,你应该设计你的类来进行可测试性,这样就不需要反射。

和开发者交流更多问题细节吧,去 写回答
相关文章
Java中的反射——(1)什么是反射
Java程序中的各个Java类属于同一类事物,描写叙述这类事物的Java类名就是Class.
全栈程序员站长
2022/07/06
4960
Java中的反射——(1)什么是反射
在Power BI中设置动图按钮的做法
在Power BI中要实现按钮变色效果,可以使用按钮工具。 1. 插入按钮 2. 设置什么状态下显示颜色 可以设置悬停或者按下的动作时显示颜色,可以分别设置3种状态下的颜色 3. 颜色设置 可以直接设置,也可以通过条件及度量值设置 当然除了填充的颜色,还可以设置文本状态 如果觉得有帮助,那麻烦您进行转发,让更多的人能够提高自身的工作效率。
逍遥之
2020/03/24
9.3K0
在Power BI中设置动图按钮的做法
你能说说Java中的反射机制吗?
JavaBean 是 reflection 的实际应用之一,它能让一些工具可视化的操作软件组件。这些工具通过 reflection 动态的载入并取得 Java 组件(类) 的属性。
好好学java
2019/05/22
3620
浅谈Java的反射(Reflection)什么是反射?为什么我们需要反射?如何使用反射总结
反射被广泛运用在那些需要检查和控制改变在运行时的行为的程序中。反射的概念常常和自检(introspection)搞混。 维基百科中的自检(introspection)定义为:
desperate633
2018/08/22
2K0
浅谈Java的反射(Reflection)什么是反射?为什么我们需要反射?如何使用反射总结
什么是反射机制?_java的反射是如何实现的
Java反射机制是在运行状态中,对于任意一个类(Class文件),都能够知道这个类的属性和方法;
全栈程序员站长
2022/11/17
3030
什么是反射机制?_java的反射是如何实现的
Vue中的15个最佳做法
在需要操纵数据时,将key属性与v-for指令一起使用可以让程序保持恒定且可预测。
刘亦枫
2020/03/19
1.3K0
使用反射获取注解中的内容
首先,需要有一个注解 @Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation { String FilePath(); } 其中: @Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD}) TYPE: 当前注解可以用
2020/10/23
2K0
Junit单元测试类、反射、注解
Junit单元测试: * 测试分类: 1. 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值。 2. 白盒测试:需要写代码的。关注程序具体的执行流程。 * Junit使用:白盒测试 * 步骤: 1. 定义一个测试类(测试用例) * 建议: * 测试类名:被测试的类名Test CalculatorTest * 包名:xxx.xxx.xx.test cn.itcast.test 2. 定义测试方法:可以独立运行 * 建议: * 方法名:tes
楠羽
2022/11/18
2930
java中的反射原理,为什么要使用反射以及反射使用场景(面试常问)
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
终有救赎
2023/10/16
5451
java中的反射原理,为什么要使用反射以及反射使用场景(面试常问)
反射机制在Java中的应用场景
【玩转 GPU】AI绘画、AI文本、AI翻译、GPU点亮AI想象空间-腾讯云开发者社区-腾讯云 (tencent.com)
疯狂的KK
2023/07/06
3040
反射机制在Java中的应用场景
你知道在springboot中如何使用WebSocket吗
  我们都知道 http 协议只能浏览器单方面向服务器发起请求获得响应,服务器不能主动向浏览器推送消息。想要实现浏览器的主动推送有两种主流实现方式:
用户2038589
2019/05/24
2.8K0
我应该使用 PyCharm 在 Python 中编程吗?
Python 是一种广泛使用的编程语言,以其简单、多功能和庞大的开发人员社区而闻名。这个社区不断创建新的库和工具,以提高Python编程的效率和便利性。选择正确的环境来编写和调试 Python 代码可能具有挑战性,但 PyCharm 是一个很好的选择,从其他选项中脱颖而出。
很酷的站长
2023/02/20
4.8K0
我应该使用 PyCharm 在 Python 中编程吗?
在 ts + Jest 单元测试中 debugging
温馨提示:因微信中外链都无法点击,请通过文末的 “阅读原文” 到技术博客中完整查阅版;
JSCON简时空
2020/03/02
4.1K0
ARM mbed是你在等的吗?
今天看了几篇ARM mbed在2015技术大会上的视频,小猿第一次关注到这一系统也是在去年一次偶然的机会,那么mbed到底是什么样的一个针对嵌入式的操作系统呢,ARM官方给出的定义是简单来说,ARM® mbed™ IoT 设备平台用于编写对可与云连接的硬件进行控制的软件 - 这是创建嵌入式连接设备的一种简单方法。面对物联网庞大的市场和潜在市场,在2014年ARM就宣布推出ARM mbedOS,正如嵌入式从业人员所知道的,面临着很多竞争,嵌入式开发现在RTOS是多家共存的现状,前段时间嵌入式程序猿公众号
用户1605515
2018/04/10
1.2K0
ARM mbed是你在等的吗?
Java中的Reflection(反射)、暴力反射
Java程序中,所有的对象都有两种类型:编译时类型和运行时类型,而很多时候对象的编译时类型和运行时类型不一致。
鱼找水需要时间
2023/05/04
4740
Java中的Reflection(反射)、暴力反射
[C#反射]C#中的反射解析及使用.
1、对C#反射机制的理解 2、概念理解后,必须找到方法去完成,给出管理的主要语法 3、最终给出实用的例子,反射出来dll中的方法 参考: C#反射,MSDN编程指南 反射是一个程序集发现及运行的过程,通过反射可以得到*.exe或*.dll等程序集内部的信息。使用反射可以看到一个程序集内部的接口、类、方法、字段、属性、特性等等信息。在System.Reflection命名空间内包含多个反射常用的类,下面表格列出了常用的几个类。 类型 作用  Assembly        通过此类可以加载操纵一个程序集,并获
一枝花算不算浪漫
2018/05/18
2.1K0
在SpringBoot单元测试中添加参数
https://github.com/baomidou/mybatis-plus/issues/4417
阿超
2022/08/21
2K0
什么是单元测试,集成测试,系统测试_软件测试中的单元测试
分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net
全栈程序员站长
2022/11/04
8830
Java中的数组是对象吗?
首先说明:Java中的数组是对象,这个可以查看The Java Language Specification SE(4.3.1)可得,另外本文讨论的相关问题的结论,在规范中都能找到,目前也被我总结在了Java漫谈-数组中。
WindCoder
2018/09/19
7.5K1
Java中的数组是对象吗?
oracle APEX中:对于Dialog的做法(1)
APEX中:Dialog的做法(1):利用分支branch跳转 但是需要有提交的动作
用户10510205
2023/04/27
5680

相似问题

我在linux 服务器使用 yum 命令 和make命令不好使是怎么回事啊?

1408

如何利用反射拒绝反射?

2312

腾讯云好不好_腾讯云系统好不好_腾讯云域名好不好?

1333

开发环境使用的是本地MySQL吗?

1162

如何在cos中设置白名单,针对微信小程序是不好使的?

1828
相关问答用户
腾讯云TDP | TDP会员擅长3个领域
平安资管 | 架构师擅长4个领域
擅长3个领域
擅长5个领域
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档