【发布时间】:2017-12-02 22:29:42
【问题描述】:
我最近开始使用 PHPUnit 进行单元测试,并且我构建了测试以检查函数成功和失败时的正确行为。
例如,我可以测试函数connectToDevice(),期望连接成功时返回true,否则返回false。然后我会:
public function testConnectToDeviceSuccess()
{
$this->assertTrue($this->myObject->connectToDevice());
}
public function testConnectToDeviceFailure()
{
$this->assertFalse($this->myObject->connectToDevice());
}
目前其中一个功能必然会失败,那么 PHPUnit 会报告我 1 失败。相反,我会将其设置为仅在两个功能都失败时标记测试失败。因此,当 1 成功时,将跳过另一个。
这在 PHPUnit 中是否可以在两个不同的函数中维护这些测试?
【问题讨论】:
-
两者都失败的唯一时间是你有一个错误,否则其中一个总是对或错。如果您在测试中有错误,则测试不会完成(仅当您没有发现错误时)。
-
@Edwin 问题是我不想有几十个本应失败的失败测试。此外,一个函数可能会抛出一个意外的异常,这将导致两个函数都失败,从而导致测试失败。
-
那么你做错了什么,无论是在测试中还是在开发中。测试应该始终有效,如果您想测试失败,只需将您的环境设置为您确定不存在连接 => connectToDevice 将是错误的。
-
@Edwin 我的观点是,当一个函数失败时(例如
connectToDevice),它应该返回/执行我定义的操作,然后它的测试就会成功。因此,测试与函数成功并没有严格相关,而是与调用函数时发生的返回或动作相关。正如我所说,我是从单元测试开始的,所以我不知道我的论点是否正确。 -
问题是你在两个测试函数中测试相同的函数
connectToDevice而不改变环境。这两个功能是相反的 => 你总是会有一个失败的测试。要更改您在其中一项功能中操作环境的功能,然后您将始终使测试成功。
标签: php unit-testing phpunit