phpUnit无法通过phpStorm远程解释器执行

rke*_*eet 6 phpunit symfony phpstorm docker

我遇到的问题是,仅在PhpStorm中单击“运行”(在Windows上为Shift + F10)时,PhpUnit不起作用(正确地,某些情况确实发生了)。


首先,接着是教程/设置指南:

所以现在,除了没有以外,几乎有了一个可行的设置。

Testing started at 15:21 ...
[docker://IMAGE_NAME:latest/]:php bin/.phpunit/phpunit-6.5/phpunit --configuration /var/www/html/phpunit.xml.dist --teamcity
PHPUnit 6.5.14 by Sebastian Bergmann and contributors.

Testing Project Test Suite

Fatal error: Uncaught PDOException: SQLSTATE[HYT00]: [unixODBC][Microsoft][ODBC Driver 17 for SQL Server]Login timeout expired in /var/www/html/src/Legacy/Connection/MssqlConnection.php on line 178

PDOException: SQLSTATE[HYT00]: [unixODBC][Microsoft][ODBC Driver 17 for SQL Server]Login timeout expired in /var/www/html/src/Legacy/Connection/MssqlConnection.php on line 178

Call Stack:
    0.0003     393408   1. {main}() /var/www/html/bin/.phpunit/phpunit-6.5/phpunit:0
    0.0571     923544   2. PHPUnit\TextUI\Command::main() /var/www/html/bin/.phpunit/phpunit-6.5/phpunit:17
    0.0571     923656   3. Symfony\Bridge\PhpUnit\Legacy\CommandForV6->run() /var/www/html/bin/.phpunit/phpunit-6.5/src/TextUI/Command.php:148
    0.2019    4269152   4. Symfony\Bridge\PhpUnit\Legacy\TestRunnerForV6->doRun() /var/www/html/bin/.phpunit/phpunit-6.5/src/TextUI/Command.php:195
    0.2158    4697272   5. PHPUnit\Framework\TestSuite->run() /var/www/html/bin/.phpunit/phpunit-6.5/src/TextUI/TestRunner.php:545
    0.2181    4702968   6. PHPUnit\Framework\TestResult->startTestSuite() /var/www/html/bin/.phpunit/phpunit-6.5/src/Framework/TestSuite.php:689
    0.2233    4717824   7. App\Tests\Helper\DeleteDBOnceListener->startTestSuite() /var/www/html/bin/.phpunit/phpunit-6.5/src/Framework/TestResult.php:368
    0.2270    4739216   8. App\Legacy\Connection\MssqlConnection->databaseExists() /var/www/html/tests/Helper/DeleteDBOnceListener.php:55
    0.2270    4739216   9. App\Legacy\Connection\MssqlConnection->findDbFromDSN() /var/www/html/src/Legacy/Connection/MssqlConnection.php:38
    0.2271    4740104  10. PDO->__construct() /var/www/html/src/Legacy/Connection/MssqlConnection.php:178


Process finished with exit code 255
Run Code Online (Sandbox Code Playgroud)

显然这是:无法连接到数据库。但!

如果我登录到Docker实例,然后运行该命令,它将成功!命令:

php bin/.phpunit/phpunit-6.5/phpunit --configuration /var/www/html/phpunit.xml.dist
Run Code Online (Sandbox Code Playgroud)

产生输出:

user@hash:/var/www/html# php bin/.phpunit/phpunit-6.5/phpunit --configuration /var/www/html/phpunit.xml.dist
PHPUnit 6.5.14 by Sebastian Bergmann and contributors.

Testing Project Test Suite
Dropping current database...
.Creating database..
................................................................ 65 / 80 ( 81%)
...............                                                   80 / 80 (100%)

Time: 3.25 minutes, Memory: 56.12MB

OK (80 tests, 336 assertions)
Run Code Online (Sandbox Code Playgroud)

那么,为什么在使用“运行”执行时,在PhpStorm中执行此操作会失败?我错过了设置吗?

Mat*_*Mat 2

自从您三年前提出问题以来,您自己可能也回答了这个问题。不过我会把我的答案留给以后进入这里的人。

错误HYT00 是来自 MSSQL 客户端的超时错误。这基本上意味着您的客户端无法访问服务器(或者响应速度非常慢)。

如果您将 PHPStorm 配置为使用 docker 容器作为解释器,那么它就是这样做的 - 仅使用 docker 容器内的 PHP作为解释器,但不在容器内运行它。您仍在主机环境、主机网络等中运行它。

确保您可以从主机访问数据库,并且在运行测试时使用正确的连接字符串。在您的测试配置中,您可能拥有 docker 的内部主机名(例如,在 docker 容器之间,您可以使用容器名称作为主机名)。从主机运行时,您将需要一个可访问的 hsotname,就像localhost:1433您将端口映射到主机一样。

通过此检查,测试应该正确执行。

只是一个题外话 - 除非您正在进行集成测试,否则在单元测试中连接到 SQL 并不是一个好主意。最好使用模拟:)