重要测试失败后如何停止测试

问题描述 投票:0回答:1

如果我的测试失败,我需要停止 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
    }
}

如果配置不正确。这可能会导致删除我的数据库,这将是灾难性的。

php laravel phpunit
1个回答
0
投票

您可以使用

@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"
并且它将在此停止,但不会针对失败的测试。

© www.soinside.com 2019 - 2024. All rights reserved.