编写单元测试(java)的最佳位置?

时间:2012-05-09 14:47:46

标签: java unit-testing testing jvm

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

6 个答案:

答案 0 :(得分:4)

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

  • 使用众所周知的单元测试框架,让您的生活变得更轻松 - 所有我认识的假设您将测试与测试代码分开
  • 拥有尽可能多的测试用例(不会使您的生产类庞大且难以管理 - 请注意,在管理良好的项目中,单元测试代码与生产代码一样多,并且可能需要更多公共测试方法比生产API方法,最终可能驱动IDE的API索引器,随后你自己,疯了......)
  • 在没有测试的情况下发布您的生产代码 - 包括您的测试依赖项(没有人喜欢将大量仅用于测试的第三方内容捆绑到产品部署包中,对吗?)
  • 在不触及生产代码本身的情况下更改测试(这将使SCM中的审核和更改控制变得更加容易,因为将生产代码/数据中的更改与测试中的更改分开将始终是微不足道的)

答案 1 :(得分:1)

最佳做法是对他们验证的代码进行单独测试。原因很简单:您不希望使用您的应用程序打包测试。应用应该是干净的。测试应该从外部验证功能。

测试通常有其他依赖项(例如测试框架,模型库等)。

通常的做法是将源代码放在src/main/java下,并在src/tests/java下进行测试。

答案 2 :(得分:0)

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

在内的类

我甚至不知道如何在同一个班级进行单元测试而不是代码...

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

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

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

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

答案 5 :(得分:0)

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

  1. 这使您的测试保持在一起,以便于导航和理智,
  2. 进行构建时,可以排除测试类 罐/战/耳。