【发布时间】:2020-04-20 00:18:11
【问题描述】:
在我目前的公司,自 2014 年以来,我们有一个由 20 多个不同的开发人员使用 PHP 开发的 web 应用程序。最近,我听到我的团队成员抱怨说某些 单元测试太体积庞大(不可读且不易跟踪内部代码),他们不想向测试类添加新的场景/方法,而是希望创建新的测试类并将这些新的场景/方法添加到新的测试类中。假设我们有一个类如下:
<?php
class Foo {
public function getOne(): string
public function getAll(): array
public function validate(): bool
}
?>
我们有一个现有的单元测试类如下:
<?php
class FooTest {
public function testGetOne() {
// scenario 1
// scenerio 2
// scenario 3
// scenario 4
// scenario 5
// scenario 6
...
}
public function testGetAll() {
// scenario 1
// scenario 2
// scenario 3
...
}
public function testValidate() {
// scenario 1
// scenario 2
...
}
}
?>
正如您在上面看到的,我们遵循一些测试类指南:
- 测试类名形成为原类名+测试后缀
- 在测试类内部,为原始类的每个可测试方法定义了一个方法(例如 testValidate)。
- 每个测试方法中都列出了测试场景
我们相信它有利于可追溯性。另一方面,有超过 1000 行的测试类,我们想以某种方式重构它们。对我来说,要解决的问题是:
- 可以为一个类创建多个单元测试类吗?如果是,那么我们应该根据什么标准将它们分开? (例如,我们是否应该为每个可测试的函数分别创建一个单元测试类FooValidateTest?)
- 我们应该如何处理这些测试类的命名约定?再次,基于 规则?
- 我们如何避免为每个单元测试类复制/过去多次帮助和模拟方法?
我想听听你的建议!
【问题讨论】:
标签: php unit-testing phpunit refactoring