单元测试 - 放置初始化代码的位置?

时间:2015-06-06 06:16:05

标签: java unit-testing junit

我喜欢单元测试很小,只需要调用被测函数和Asserts。

但我对放置初始化代码的位置感到困惑?有许多变量,如请求/响应对象,以及单元测试使用的其他变量。有几种方法可以初始化它们。

  1. 在测试本身内初始化它们,但这导致测试变得越来越大
  2. 有一个setUp()或initialize(),它有初始化的东西,这导致私有类变量的数量,但似乎比其他2更好,因为所有初始化代码都在一个地方。
  3. 有私有方法可以做到这一点,导致很多私有方法,有时1个测试需要2-3个私有方法。
  4. 任何人都可以指出哪种方法更好?此外,对此的一些好的写作的任何引用都将不胜感激。

3 个答案:

答案 0 :(得分:2)

  

有一个setUp()或initialize(),它有初始化的东西,这导致私有类变量的数量,但似乎比其他2更好,因为所有初始化代码都在一个地方。

您应该将初始化代码放在使用@Before和@BeforeClass注释注释的方法中。使用这个约定,每个其他开发人员都不会感到惊讶,并会很快找到他想要的东西。请注意,这并不意味着您不应在JUnit测试中创建私有方法。当您的setup()方法最终变大时,您可能会考虑将其按代码的逻辑部分拆分为私有方法。

我在简要描述JUnit中的良好实践时发现this site很有帮助。

答案 1 :(得分:0)

我们可以使用JUnit中提供的封闭功能。使用它我们可以将与静态内部类相关的测试分组,并且可以为相关测试提供通用的setUp。如果我们在所有测试中都有一些共同的变量,我们可以放入外部类。请查看this了解更多详情。

答案 2 :(得分:0)

以清晰整洁的方式组织测试并不容易,而且在很大程度上取决于您的背景。但是你应该考虑几件事情:

  • 所有测试用例共有的初始化代码应该是@Before或@BeforeClass方法。特别是,您应该将后者用于计算成本高昂的代码,例如连接到数据库。
  • 特定于每个测试用例的初始化代码应该在测试用例本身中。使用模式简化每项测试的设置,例如ObjectMotherTest Data Builder

我并不特别喜欢在测试中使用私有辅助方法,尽管在某些特定情况下我发现它们很有用。但我宁愿创建一个可以在其他地方重用的独立辅助类(某种类型的构建器,很可能)。

希望这有帮助。