测试构造函数太多了吗?

Jua*_*ano 7 php phpunit unit-testing software-quality

首先,我会说我来自Java世界(这很重要,真的).

我已经编写了一段时间的PHP,我遇到的一个问题是由于缺少编译,有时可能在编译时很容易检测到错误(例如,给定函数的参数数量错误),可以默默地通过.

通过添加单元测试,可以轻松检测到代码覆盖率增加.问题是,例如测试构造函数以检查传递的参数是否正确是否有意义?我不是指参数的数量,而是指这些参数的内容(例如,如果参数为null,某些对象应该启动异常以避免创建"脏"对象).

问题是,我是否被多年的Java代码污染了?因为毕竟,增加代码覆盖率以"发现"错过的函数感觉就像(真正)原始的编译方式.

另外,我想说明我已经使用了开发环境(PHPStorm),我们也使用了像PHPCodeSniffer这样的工具.

有什么想法/建议吗?

ose*_*ose 5

这是一个很好的问题,可以在多个层面上回答:

  1. 语言特点
  2. 测试覆盖率
  3. 案例工具

一、语言特点 正如您所指出的,PHP 语言的特性与诸如 Java 之类的强类型语言明显不同。这引发了一个严重的问题,即来自 Java 和 C# 等强类型语言的程序员可能没有意识到 PHP 行为(例如您所描述的那些)的含义。这引入了程序员出错的可能性(例如,一个程序员在使用 Java 时可能不太小心,因为他们知道编译器会捕获不正确的参数,在用 PHP 进行开发时可能不会采取适当的措施)。因此,需要更好的程序员教育/监督来解决这个问题(例如内部公司编码标准、结对编程、代码审查)。

2. 测试覆盖率测试覆盖率 的论据是非常特定于项目的。在现实世界中,测试覆盖的级别主要取决于客户的容错能力(这取决于系统中发生错误的后果)。如果您正在开发要在实时控制系统上运行的软件,那么显然您将进行更多测试。在您的问题中,您将 PHP 确定为首选语言;这同样适用于越来越多的关键系统基础设施的网络前端。另一方面,如果您正在为模型铁路俱乐部开发一个简单的网站,并且只是在开发时事通讯应用程序,那么您的客户可能不会关心构造函数中出现错误的可能性。

3. CASE 工具 最终希望有一个 CASE 工具可用,它可以检测这些错误,例如缺少参数。如果没有合适的工具,为什么不自己创建一个。CASE 工具的创建对于大多数程序员来说并非遥不可及,特别是如果您可以连接到您的语言的开源解析引擎。如果您倾向于开源,这可能是一个很好的启动项目,或者您的公司可能会推出这样的解决方案。

结论 在你的情况下,是否测试构造函数基本上归结为一个问题:我的系统出现故障会产生什么后果?如果花费额外的资源来测试构造函数以避免此类故障在财务上有意义,那么您应该这样做。否则,可以通过较少的测试(例如结对编程或代码审查)来解决。