单元测试中用于检查代码覆盖率的反思

2024-03-05

这是场景。我有 VO(值对象)或 DTO 对象,它们只是数据的容器。当我将它们分开并保存到数据库(由于很多原因)无法优雅地映射到 VO 时,我想测试每个字段是否已在数据库中成功创建并成功读回重建 VO。

有没有办法可以测试我的测试是否涵盖了 VO 中的每个字段?我有一个关于使用反射来迭代 VO 字段作为解决方案的一部分的想法,但也许你们之前已经解决了这个问题?

当我在 VO 中添加字段时,我希望此测试失败,并且不记得在测试中添加对其的检查。

开发环境: 使用 JUnit、Hibernate/Spring 和 Eclipse


把事情简单化:为每个 VO/DTO 编写一个测试:

  1. 用测试数据填充 VO/DTO
  2. save it
  3. (可选:检查所有内容是否已在数据库级别正确保存,使用纯 JDBC)
  4. load it
  5. 检查加载的 VO/DTO 和原始的是否匹配

生产代码将会不断发展,测试也需要维护。恕我直言,使测试尽可能简单,即使它们是重复的,也是最好的方法。过度设计测试或测试框架本身以使测试通用(例如通过反射读取字段并自动填充 VO/DTO)会导致几个问题:

  1. 编写测试所花费的时间更长
  2. 测试本身可能会引入错误
  3. 测试的维护更加困难,因为它们更加复杂
  4. 测试更难发展,例如通用代码可能不适用于与其他略有不同的新型 VO/DTO,稍后将介绍(这只是一个示例)
  5. 测试不能轻易地用作生产代码如何工作的示例

测试代码和生产代码本质上有很大不同。在生产代码中,您尝试避免重复并最大限度地重用。生产代码可能很复杂,因为它是经过测试的。另一方面,您应该尝试尽可能简单地进行测试,并且重复是可以的。如果重复的部分被破坏,测试无论如何都会失败。

当生产代码发生更改时,可能需要进行多次测试琐碎地改变了。测试被视为的问题boring一段代码。但我认为他们就应该这样。

如果我问错了你的问题,请告诉我。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单元测试中用于检查代码覆盖率的反思 的相关文章

  • Java中反射是如何实现的?

    Java 7 语言规范很早就指出 本规范没有详细描述反射 我只是想知道 反射在Java中是如何实现的 我不是问它是如何使用的 我知道可能没有我正在寻找的具体答案 但任何信息将不胜感激 我在 Stackoverflow 上发现了这个 关于 C
  • 如何在 Play java 中创建数据库线程池并使用该池进行数据库查询

    我目前正在使用 play java 并使用默认线程池进行数据库查询 但了解使用数据库线程池进行数据库查询可以使我的系统更加高效 目前我的代码是 import play libs Akka import scala concurrent Ex
  • Play框架运行应用程序问题

    每当我尝试运行使用以下命令创建的新 Web 应用程序时 我都会收到以下错误Play http www playframework org Error occurred during initialization of VM Could no
  • Final字段的线程安全

    假设我有一个 JavaBeanUser这是从另一个线程更新的 如下所示 public class A private final User user public A User user this user user public void
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • 反射找不到对象子类型

    我试图通过使用反射来获取包中的所有类 当我使用具体类的代码 本例中为 A 时 它可以工作并打印子类信息 B 扩展 A 因此它打印 B 信息 但是当我将它与对象类一起使用时 它不起作用 我该如何修复它 这段代码的工作原理 Reflection
  • 如何将 Eclipse Classic 升级到 Java EE?

    我想开发 HTML5 网站 我已经安装了用于Android开发的Java 我的机器上安装了 Eclipse Classic 3 6 现在我希望在同一台机器上安装 Java EE 是否可以 如果是这样 请告诉我如何将 Eclipse Clas
  • 操作错误不会显示在 JSP 上

    我尝试在 Action 类中添加操作错误并将其打印在 JSP 页面上 当发生异常时 它将进入 catch 块并在控制台中打印 插入异常时出错 请联系管理员 在 catch 块中 我添加了它addActionError 我尝试在jsp页面中打
  • 路径中 File.separator 和斜杠之间的区别

    使用有什么区别File separator和一个正常的 在 Java 路径字符串中 与双反斜杠相反 平台独立性似乎不是原因 因为两个版本都可以在 Windows 和 Unix 下运行 public class SlashTest Test
  • 如何为俚语和表情符号构建正则表达式 (regex)

    我需要构建一个正则表达式来匹配俚语 即 lol lmao imo 等 和表情符号 即 P 等 我按照以下示例进行操作http www coderanch com t 497238 java java Regular Expression D
  • 为什么HashMap不能保证map的顺序随着时间的推移保持不变

    我在这里阅读有关 Hashmap 和 Hashtable 之间的区别 http javarevisited blogspot sg 2010 10 difference Between hashmap and html http javar
  • JRE 系统库 [WebSphere v6.1 JRE](未绑定)

    将项目导入 Eclipse 后 我的构建路径中出现以下错误 JRE System Library WebSphere v6 1 JRE unbound 谁知道怎么修它 右键单击项目 特性 gt Java 构建路径 gt 图书馆 gt JRE
  • AWS 无法从 START_OBJECT 中反序列化 java.lang.String 实例

    我创建了一个 Lambda 函数 我想在 API 网关的帮助下通过 URL 访问它 我已经把一切都设置好了 我还创建了一个application jsonAPI Gateway 中的正文映射模板如下所示 input input params
  • Eclipse Java 远程调试器通过 VPN 速度极慢

    我有时被迫离开办公室工作 这意味着我需要通过 VPN 进入我的实验室 我注意到在这种情况下使用 Eclipse 进行远程调试速度非常慢 速度慢到调试器需要 5 7 分钟才能连接到远程 jvm 连接后 每次单步执行断点 行可能需要 20 30
  • Google App Engine 如何预编译 Java?

    App Engine 对应用程序的 Java 字节码使用 预编译 过程 以增强应用程序在 Java 运行时环境中的性能 预编译代码的功能与原始字节码相同 有没有详细的信息这是做什么的 我在一个中找到了这个谷歌群组消息 http groups
  • Java列表的线程安全

    我有一个列表 它将在线程安全上下文或非线程安全上下文中使用 究竟会是哪一个 无法提前确定 在这种特殊情况下 每当列表进入非线程安全上下文时 我都会使用它来包装它 Collections synchronizedList 但如果不进入非线程安
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 如何修复 JNLP 应用程序中的“缺少代码库、权限和应用程序名称清单属性”?

    随着最近的 Java 更新 许多人都遇到了缺少 Java Web Start 应用程序的问题Codebase Permissions and Application name体现属性 尽管有资源可以帮助您完成此任务 但我找不到任何资源综合的

随机推荐

  • 使用 Dancer 和 Postgres 的简单登录/授权系统

    作为 Perl 的新手 我正在努力寻找一种简单的方法来做到这一点 我在数据库中创建了一个非常简单的表 CREATE TABLE users id SERIAL NOT NULL PRIMARY KEY username TEXT NOT N
  • 如何在 Yii2 html::dropdownlist 中保留所选值?

    我认为有以下代码 and submit button 我的代码运行良好 但有一个大问题 我选择一个区域并单击搜索按钮 结果正确 当我单击下一页时 每页显示 10 个结果 它给了我
  • 如何在 WinDbg 中删除断点 ntdll!DbgBreakPoint+0x1

    我正在调试一个在将 WinDbg 设置为事后调试器时崩溃的程序 我在地址 77f7f571 设置了断点 当它被触发时 我常常得到以下信息 ERROR Symbol file could not be found Defaulted to e
  • 导入库 Oshi

    我想开发一个显示计算机信息的程序 我找到了一个名为 Oshi https github com oshi oshi 当我导入该库并运行我的代码时 出现异常 Exception in thread main java lang NoClass
  • 无法从 CursorWindow 读取第 0 行第 9 列

    我收到错误无法从 CursorWindow 读取第 0 行 第 9 列 在访问游标中的数据之前 请确保游标已正确初始化 另外两个人能够毫无错误地运行代码 但在我的机器上它会抛出错误 我很困惑 下面是处理 SQLite 的代码 提前致谢 抱歉
  • 如何使用 Arcore 截屏?

    我正在尝试截取增强现实屏幕的屏幕截图并将其作为位图传递给另一个活动 这是我用来截取屏幕截图的代码 截图功能 public static void tmpScreenshot Bitmap bmp Context context try Wr
  • 在聚集索引上使用顺序 GUID 键插入的速度并没有明显加快

    在 SQL Server 2008 中 我尝试重现顺序与非顺序 GUID 键上的聚集索引的实验结果 如下所示http sqlblog com blogs denis gobo archive 2009 02 05 11743 aspx ht
  • 如何在python中解析ISO格式的日期时间字符串?

    在 pandas 中 我们如何根据这些数据创建日期时间列 df pd DataFrame date 2020 02 04T22 03 44 846000 00 00 print df date 0 2020 02 04T22 03 44 8
  • 使用 VBA 双击单元格以显示 Excel 中链接中的图片

    我有以下功能 如果您将鼠标悬停在图片上 它将显示图片 它非常整洁并且运行良好 但是 我想将其从在其上运行鼠标更改为双击功能 下面是当您将鼠标悬停在单元格上时将显示图片的有效代码 Dim DoOnce As Boolean Public Fu
  • 导航栏中带有大图块或搜索栏的 UIRefreshControl 的动画出现故障

    我有一个嵌入导航控制器的控制器 带有大标题和 UIRefreshControl 当我在 tableView 上进行拉动刷新时 活动指示器的动画非常不稳定 我不知道我的代码是否有不良行为 tableView refreshControl UI
  • 多列数据转换

    我正在从数据源接收数据 在将信息发送到 UI 进行显示之前 我需要先进行数据透视 I am new to concept of pivoting I am not sure how to go about it 问题有两个部分 形成标题 旋
  • .NET 中是否有热插拔的参考实现?

    我正在寻找在 NET 中完成热交换的良好实现 我需要的东西是 能够将 DLL 部署到特定文件夹中并让正在运行的系统拾取它们 让正在运行的系统更新容器中的相应引用 我一直在研究MEF及其目录加载机制 但它似乎非常不可靠 也许有人有替代的实现
  • 相当于 conda 的 apt-get install python3.6-dev

    如何使用开发版本的python创建conda环境 或者当我创建一个时它是否已经包含所有必要的扩展 conda create n py36 python 3 6 conda search python最高版本为 3 6 5 因此我认为只能通过
  • Bootstrap Sass Rails 4 自定义样式

    我正在尝试使用 bootstrap 自定义 Rails 应用程序的样式变量较少可用的here http getbootstrap com customize 我正在使用引导 Sass https github com twbs bootst
  • 如何在 numpy 中进行分散/聚集操作

    可以说我有数组 a array 1 2 3 4 5 indices array 1 1 1 1 我执行操作 a indices 1 结果是 array 1 3 3 4 5 换句话说 重复项indices被忽略 如果我希望重复项不被忽略 结果
  • 如何在 Swift 中将 UInt8 字节数组转换为字符串

    我在转换时遇到问题UInt8swift 中的字节数组到字符串 我已经搜索并找到了一个简单的解决方案 String stringWithBytes buff encoding NSUTF8StringEncoding 但它显示错误String
  • IllegalArgumentException:不支持的 ABI:Android 5.0 上的 VMRuntime.getInstructionSet() 中为 null

    在我们最近更新后 在 Google Play Console 上看到我们 Unity 制作的游戏发生崩溃 超过 99 的情况发生在 Android 5 0 上 我猜这与 WebView 有关 并看到了这个相关帖子 https bugs ch
  • 尝试在 h5py 中打开 pandas 创建的 hdf 时缺少列

    这就是我的数据框的样子 第一列是一个整数 第二列是 512 个整数的单个列表 IndexID Ids 1899317 0 47715 1757 9 38994 230 12 241 12228 22861131 0 48156 154 63
  • 配置android EditText以允许小数和负数

    我有一个安卓EditText我想让数字键盘出现 如果我将 android inputType 设置为 numberSigned 我将获得数字键盘并能够输入负数 然而 这不会让我使用小数 如果我使用 numberDecimal inputTy
  • 单元测试中用于检查代码覆盖率的反思

    这是场景 我有 VO 值对象 或 DTO 对象 它们只是数据的容器 当我将它们分开并保存到数据库 由于很多原因 无法优雅地映射到 VO 时 我想测试每个字段是否已在数据库中成功创建并成功读回重建 VO 有没有办法可以测试我的测试是否涵盖了