单元测试:初学者问题

时间:2009-01-23 16:33:15

标签: php unit-testing

我终于开始进行单元测试了,我知道我应该这样做一段时间,但我有几个问题:

  • 我应该或不应该重新测试父母 测试孩子时的课程 没有方法被覆盖?
  • 从概念上讲,你如何测试 提交了表格的一部分?我正在使用 PHP。 (编辑:我之所以这样说的原因是我有一个高级表单类,它生成一个表单,验证它,过滤它,并通过将类似JSON的数组作为输入生成任何错误消息委托给各种较小的班级。但是,如果不提交表格,我就无法测试错误等。编辑This看起来可能是一个答案。)
  • 如果您在a中有可选参数 方法,你应该写一个测试 他们在场的时间和时间 他们不是吗?
  • 应该以任何方式进行单元测试 结合测试代码执行 时间还是应该完全保留 分开?
  • 有没有合理的理由不运行 你每次都是完整的测试套件吗?
  • 就这样,我得到了我的术语 对,单位单位是什么 测试参考?班级正在 测试?方法?参数? 还有别的吗?

4 个答案:

答案 0 :(得分:9)

  • 测试父母,测试孩子;如果孩子没有覆盖父方法,则无需重新测试。
  • 我不确定我理解第二个。您可以使用Selenium自动测试表单。这是你的意思吗?
  • 测试应该包括“快乐路径”和所有边缘情况。如果您有一个可选参数,请编写测试以显示存在且不存在的值的正确操作。
  • 单元测试,集成测试,验收测试,负载测试都是可能有一些重叠的不同想法。
  • 我敢打赌,有正当理由,但如果您正在进行自动运行测试套件的自动构建,为什么不运行它们呢?也许长时间会浮现在脑海中,但这是我能想到的唯一原因。值得看到所有这些都继续传递,而你所做的改变并没有破坏任何东西。
  • 对我进行单元测试意味着您正在测试的课程,可以有多种方法。我把它们与课程联系起来,而不是形式。表单意味着对我进行UI和集成测试。

答案 1 :(得分:6)

(与你的问题的顺序不一样)

  • 如果完整的测试套件不需要太长时间,则应始终将其完整运行。您通常不知道确切的变化可能导致哪些副作用。

  • 如果您可以将速度测试与您最喜欢的单元测试工具结合使用,那么您应该这样做。这为您提供了有关更改质量的其他信息。但只能对代码中对时间要求严格的部分执行此操作。

  • 来自维基百科:“单位是应用程序中最小的可测试部分。”

答案 2 :(得分:2)

按顺序回答问题:

  • 如果父类已经过测试,那么请避免重复,只测试孩子的新方面或孩子改变的任何方面。
  • 不确定 - 做了很少的PHP。
  • 是=>测试方法的所有方面。
  • 您可以进行一些测试性能的单元测试,但是他们会专注于性能,而其他人可能会专注于测试功能。不要在同一个测试中混合使用。
  • 理想情况下,您应该每次都经常运行它们。有时,如果执行时间很长,您可能需要考虑将它们重构为较小的套件,然后仅在更改时执行受影响的套件 - 但仍然会定期执行所有操作。

答案 3 :(得分:2)

我会回答那些我能做的事。

  

如果没有覆盖任何方法,我应该或不应该在测试子类时重新测试父类吗?

您应该完全测试父级,然后仅测试中孩子的更改

  

如果方法中有可选参数,那么当它们存在时和不存在时,是否应该为它们编写测试?

是的,测试导致行为改变的任何事情。

  

单位测试是否应该与测试代码执行时间相结合,还是应该完全分开?

他们应该保持分开。单元测试是测试方法是否符合预期。您应该在系统级别测试代码执行时间,然后将其分解以找到瓶颈。测试每个单元的性能只会导致过早优化。

  

是否有任何正当理由不在每次都运行完整的测试套件?

如果您的测试套件很庞大并且需要很长时间,那么您可能只想在开发时运行的子集。当你(想想)完成后你应该运行整个套件,以确保你没有破坏任何其他东西。

  

就这样,我的术语是正确的,单元测试中的单位是指什么?正在测试的课程?方法?参数?还有别的吗?

“单位”是指正在测试的方法。这是将软件分解为最有意义的最小单元。 A类的方法可能使用B类,但您为该方法编写的任何测试都不应该关注。试试那个方法。