0

在与测试方法相同的类中编写单元测试或在另一个类(相同包或外部包)中编写单元测试有什么区别?这些测试地点的优点或缺点是什么?

4

6 回答 6

4

如果您在单独的课程中进行测试,您可以

  • 使用一个众所周知的单元测试框架,让你的生活更轻松——我所知道的所有这些都假设你将测试与测试代码分开
  • 拥有尽可能多的测试用例(不会使您的生产类变得庞大且难以管理 - 请注意,在管理良好的项目中,单元测试代码与生产代码一样多,并且可能比生产更多的公共测试方法API 方法,最终可能会驱动你的 IDE 的 API 索引器,然后你自己,疯狂......)
  • 在没有测试的情况下发布您的生产代码- 包括您的测试依赖项(没有人喜欢将大量仅用于测试的 3rd 方东西捆绑到产品部署包中,对吗?)
  • 在不接触生产代码本身的情况下更改测试(这将使 SCM 中的审计和更改控制变得更加容易,因为将生产代码/数据中的更改与测试中的更改分开总是很简单的)
于 2012-05-09T14:52:35.327 回答
1

最佳实践是将测试与它们正在验证的代码分开。原因很简单:您不想将测试与您的应用程序打包在一起。应用程序应该是干净的。测试应该从外部验证功能。

测试通常有额外的依赖项(例如测试框架、模型库等)。

常见的做法是将源代码src/main/java放在src/tests/java.

于 2012-05-09T14:54:03.647 回答
0

在分离的类中编写的优点是您可以将测试与代码分开。例如使用 maven:
1. 构建一切
2. 执行包括**/*Test*.java pattern

我什至不知道如何在与代码相同的类中进行单元测试...

于 2012-05-09T14:51:59.140 回答
0

测试方法可以测试您的代码。将它们放在被测试的类中会使类的 API 变得混乱,并使类的字节码和依赖项变得比必要的大。

如果我想使用你的 Calculator 类,我不需要testPlusWorks()andtestMinusWorks()测试方法。我只需要plus()minus()。如果testPlusWorks依赖于 JUnit 或 Mockito 库中的某个类,我不希望在生产环境中使用这些依赖项:它们仅在测试类时有用。

于 2012-05-09T14:53:39.393 回答
0

这个问题没有“正确”的答案。

在同一个类中编写:允许您测试私有方法,但会弄乱代码。

在同一个项目中编写:允许您测试内部方法/逻辑,但会弄乱项目并延长编译时间。

外部编写:阻止您测试项目内部方法/类,但保持测试干净并在您的“生产”编码器外部。

于 2012-05-09T14:53:55.667 回答
0

我发现最好将单元测试完全写在不同的源文件夹中,但将它们保存在同一个包中,因为您仍然可以访问打包(默认)范围的方法和变量。

  1. 这使您的测试保持在一起,以便于导航和健全
  2. 当您进行构建时,您可以排除 jar/war/ear 中的测试类。
于 2012-05-09T14:54:16.347 回答