如果我的测试失败,我需要停止 PHPUnit 测试。 此文件和任何其他文件中不再有测试。
这是我的尝试。但这并不会阻止任何进一步的测试。
public function test_env_testing_is_existing(): void
{
throw new \Exception('Some Exception Text');
}
我还可以使用“stopOnFailure =“true”配置 phpunit.xml。 如果我的任何测试失败,这会停止任何进一步的测试,但不是特别是这个测试。
最后,我的用例是测试是否有正确的数据库配置用于测试。
public function test_env_testing_is_existing(): void
{
if (!file_exists(base_path('.env.testing'))) {
throw new \Exception('.env.testing file does not exist in the root directory'); // Stop further tests
}
}
如果配置不正确。这可能会导致删除我的数据库,这将是灾难性的。
@depends
功能使每个测试都取决于环境检查的结果,但如果您有很多这样的测试,这可能会变得相当乏味。
您可以使用执行环境检查的
setUpBeforeClass()
函数进行抽象测试,然后让所有测试扩展该抽象,但这也相当乏味,并且不必要为每个测试运行检查。
您可以修改文件名和函数的拼写,以确保环境检查始终首先运行,但这很危险。
我建议将引导程序添加到您的
phpunit.xml
文件中:
<phpunit ... bootstrap="tests/bootstrap.php">
然后,在该文件中运行检查以确保您处于测试模式:
<?php
if (!file_exists('whatever')) {
throw new Exception('...');
}
// Maybe check env too
if ($_ENV['APP_ENV'] !== 'test') {
throw new Exception('...');
}
// Maybe check database name
if ($_ENV['DB_NAME'] !== 'prod_db_name') {
throw new Exception('...');
}
由于这不是测试,您仍然可以拥有
stopOnFailure="false"
并且它将在此停止,但不会针对失败的测试。