【问题标题】:Why are unit tests necessary? [duplicate]为什么需要单元测试? [复制]
【发布时间】:2019-07-23 20:08:49
【问题描述】:

这可能不是问这个问题的正确地方。然而,几个月前,我作为大学的学生开发人员在我的第一份编程工作中被聘用,我已经不得不编写几个单元测试。在我被录用之前,我有机会与另一位开发人员交谈,他们认为不需要进行案例单元测试。他提出了这个案例:如果你向一个方法扔数据应该知道结果是什么,而无需编写测试,我认为这是有道理的。

例如(Java):

public int Add(int num1, int num2) {
   return(num1 + num2);
}
//if I call Add(2,2) I know I should get 4, 
//if I call Add(5,6) I know I should get 11,
//etc...

我试着问我的同事这件事,他的回答或多或少是这样的,其他人都这样做,所以我们必须这样做。

所以,我想我的问题是:如果您可以通过使用虚拟数据重复调用代码而不是使用单元测试进行一次测试来测试您的代码,为什么还要进行单元测试?

【问题讨论】:

  • 会有很多可能的途径来回答这个问题,但我认为最重要的一条是:为您的代码编写单元测试将使您更好地理解您正在编写的代码,从而发现潜在的弱点和改进的潜力。
  • 该论点,至少如此处所述,作为对单元测试的反对意见毫无意义。如果您知道给定这些输入的期望结果,为什么以可以自动验证的方式表达该期望? “您可以通过使用虚拟数据重复调用它来测试您的代码” - 这听起来很像单元测试...
  • UT IMO 的主要好处:1 检查代码是否(仅)执行它现在应该执行的操作 2 检查代码是否仍然执行它应该在未来执行的操作 3 让自己站在一个使用您的代码并检测设计问题 4 为那些想要了解代码的人提供某种附加文档。老实说,如果开发人员在面试中告诉我不需要 UT:游戏结束(从未发生过)。
  • 单元测试是自动化的健全性测试。

标签: java unit-testing


【解决方案1】:

单元测试是在易于管理和运行的框架中进行的特定书面测试,它通过使用“虚拟数据”调用您的代码来工作。当然,一个好的测试也会遇到各种边缘情况。

只是为了好玩,让我们拿你的代码:

如果我将 INT_MAX(不确定 Java 是否与此等效,但可能是 Integer.MAX_VALUE)作为 num1 并将 10 作为 num2 传递到您的代码中,会发生什么情况。它会返回INT_MAX + 10 还是别的什么?如果是这样,这是错误情况还是预期的?单元测试也可以将这些问题形式化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 2019-03-10
    • 2018-10-30
    相关资源
    最近更新 更多