java - JUnit:放置测试方法的最佳策略
问题描述
我开始了一个项目并第一次使用 JUnit。
放置测试用例的最佳做法是什么?
每个“真实”课程都有 1 个测试课程。
每个包甚至整个项目都有 1 个测试类。
没有测试类的“真实”类中的测试方法。
据我所知,我在技术上可以每 3 种方式做一次,但我没有这方面的经验,所以我从一开始就要求一些指导来做这件事。
编辑
我说的是代码单元测试。我也在使用 maven,但我认为这对我的问题并不重要。
解决方案
每个“真实”课程都有 1 个测试课程。
我通常采用这种模式。当然,接口测试没有多大意义,有时只有 getter 和 setter 方法(即没有逻辑)的小型“实体”类不需要相应的测试类。
也就是说,即使在非常小的类上,我在单元测试中发现的实用程序也让我感到惊讶。例如,即使是通过 DAO 方法存储在数据库中的只有 get/set 方法的实体类,也应该进行测试,以防某些数据库接线不正确。您永远不知道何时您的 get/set 方法不匹配,或者是否存在toString()
、不对称hashcode()
或equals()
或其他问题。
“单元”测试的全部意义在于(恕我直言)单独测试代码的最小单元——这就是类。因此,当我有一个类时,我会在测试目录中ContainerUtil
查找相应的类。ContainerUtilTest
我经常运行覆盖测试,我希望几乎所有类的任何逻辑部分都被覆盖。
每个包甚至整个项目的 1 个测试类。
我可能也有这个,但后来我认为这些是“集成”测试。在类之间或项目的各个部分之间架起桥梁的测试,以确保您的项目作为一个整体工作。
但这些将是您单元测试的补充。
没有测试类的“真实”类中的测试方法。
是的,不。真是个坏主意。如果可能的话,您不希望您的生产代码包含测试代码。它会降低你的类的可读性,增加你在尝试测试时破坏某些东西的变化,等等。只要说不。
我也让我的测试课程远离我的来源。我通常使用 maven,所以我有我的源代码src/main/java
和我的测试src/test/java
。您不希望您的测试最终出现在 jar 或 war 文件中,因为它们可能会使其他人感到困惑。
推荐阅读
- hyperledger-fabric - 更改 Hyperledger Fabric 中的默认 mod_policy
- java - ForkJoinPool:invokeall() 是否以错误的顺序加入?
- java - 是否可以在springboot中将name设置为变量,例如@Bean(name =“abc”)?我们可以动态传递 abc 的值吗?
- c# - Validator.TryValidateObject 在所有情况下始终返回 true
- vue.js - 多重深度观察:重复键
- node.js - Google OAuth2:错误:未设置访问、刷新令牌或 API 密钥
- python - os 模块破坏了 python,我没有运行的程序出现错误
- bash - 如果 psql 在执行 sql 脚本时抛出错误,则退出 shell 脚本
- neo4j - 在 Neo4j-Mac mojave 中获取数据库创建错误
- html - 提取的 URL 未重定向