gpt4 book ai didi

Symfony PHPUnit self::$kernel 在第二次测试中为空

转载 作者:行者123 更新时间:2023-12-04 04:18:48 24 4
gpt4 key购买 nike

我正在尝试创建一个 PHPunit 测试,从 symfony 中的容器访问服务。为此,我调用 self::bootKernelsetUpBeforeClass .在第一次测试中,self::$kernel没问题,但第二次测试 self::$kernel一片空白。

这是一个简单的测试来检查它:

<?php

namespace App\Tests;

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;

class KernelTest extends WebTestCase
{
public static function setUpBeforeClass(): void
{
self::bootKernel();
}

public function testMethod1(){
$this->assertNotNull(self::$kernel);
}

public function testMethod2(){
$this->assertNotNull(self::$kernel);
}
}

这会产生以下输出:
$ bin/phpunit tests/KernelTest.php 
PHPUnit 7.5.18 by Sebastian Bergmann and contributors.

Notice: Undefined index: warnings in /app/vendor/phpunit/phpunit/src/TextUI/TestRunner.php on line 334

Warning: Invalid argument supplied for foreach() in /app/vendor/phpunit/phpunit/src/TextUI/TestRunner.php on line 334

Testing App\Tests\KernelTest
.F 2 / 2 (100%)

Time: 58 ms, Memory: 16.00 MB

There was 1 failure:

1) App\Tests\KernelTest::testMethod2
Failed asserting that null is not null.

/app/tests/KernelTest.php:19

FAILURES!
Tests: 2, Assertions: 2, Failures: 1.

如您所见,第二个测试未通过断言。

这是我正在运行的 phpunit 版本:
phpunit/phpunit                     8.5.2      The PHP Unit Testing framework.
symfony/phpunit-bridge v5.0.2 Symfony PHPUnit Bridge

我做错了什么?我应该在每次测试中启动内核吗?我只想启动它一次。

最佳答案

看看 WebTestCase 的定义,例如通过 GitHub :在其 tearDown方法,父 tearDownKernelTestCase (再次参见 GitHub)被调用,这会强制关闭内核。如 tearDown在每个单独的测试之后调用,在所有其他测试之前启动内核一次没有帮助。

Symfony's own documentationsetUp 中引导内核(发生在每个单独的测试用例之前),所以这对我来说是合理的。

如果您担心性能问题,请记住不应在任何地方使用此类集成测试。通过遵循通常的测试金字塔,您应该有大量的单元测试(单独测试代码的一小部分),对耦合类的测试较少(您可以模拟依赖部分),并且只有少数测试用例覆盖整个系统

关于Symfony PHPUnit self::$kernel 在第二次测试中为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59964480/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com