- ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, Π½Π΅ ΡΠΎΠΎΠ±ΡΠ°ΠΉΡΠ΅ ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅ Ρ Π²Π΅ΡΡΠΈΠ΅ΠΉ PHPUnit, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ. Π‘ΠΏΠΈΡΠΎΠΊ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π²Π΅ΡΡΠΈΠΉ PHPUnit Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ https://phpunit.de/supported-versions.html. - ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, Π½Π΅ ΡΠΎΠΎΠ±ΡΠ°ΠΉΡΠ΅ ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅, Π΅ΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π²Π΅ΡΡΠΈΡ PHP, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ Π²Π°ΠΌΠΈ Π²Π΅ΡΡΠΈΠ΅ΠΉ PHPUnit. Π‘ΠΏΠΈΡΠΎΠΊ, ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΉ, ΠΊΠ°ΠΊΠ°Ρ Π²Π΅ΡΡΠΈΡ PHP ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΠΈ ΠΊΠ°ΠΊΠ°Ρ Π²Π΅ΡΡΠΈΡ PHPUnit Π΄ΠΎΡΡΡΠΏΠ½Π° ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ https://phpunit.de/supported-versions.html. - ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΡΠΎΡ ΡΠ°Π±Π»ΠΎΠ½ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ Π²Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ. - Π‘ΠΎΡ ΡΠ°Π½ΠΈΡΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΡ Π½ΠΈΠΆΠ΅ ΡΠ°Π±Π»ΠΈΡΡ Π² Π²Π΅ΡΡ Π½Π΅ΠΉ ΡΠ°ΡΡΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. - ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, Π²ΠΊΠ»ΡΡΠΈΡΠ΅ Π²ΡΠ²ΠΎΠ΄ Β«ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΎΡΠ΅ | ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ°Β», Π΅ΡΠ»ΠΈ Π²Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΈ PHPUnit Ρ ΠΏΠΎΠΌΠΎΡΡΡ Composer. - ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΠ΅ ΠΊΠΎΠ΄ Π² Π²ΠΈΠ΄Π΅ ΡΠ΅ΠΊΡΡΠ° (ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠΊΡ). ΠΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΠΉΡΠ΅ ΡΠΊΡΠΈΠ½ΡΠΎΡΡ ΠΊΠΎΠ΄Π°. - ΠΠΎΡΠ΅ΡΠΈΡΠ΅ https://phpunit.de/support.html, Π΅ΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ°. - Π£Π΄Π°Π»ΠΈΡΠ΅ ΡΡΠΎΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ ΠΏΠ΅ΡΠ΅Π΄ ΠΎΡΠΏΡΠ°Π²ΠΊΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
| Q | Π
| -------------------- | ---------------
| ΠΠ΅ΡΡΠΈΡ PHPUnit | 8.4.3
| ΠΠ΅ΡΡΠΈΡ PHP | 7.4.0 (SAPI Π΄Π»Ρ phpdbg)
| Π‘ΠΏΠΎΡΠΎΠ± ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ | ΠΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΎΡ
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ»ΡΡΠΈΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π² phpdbg
. Π‘Π½Π°ΡΠ°Π»Π° Ρ ΠΏΠΎΠ΄ΡΠΌΠ°Π», ΡΡΠΎ ΡΡΠΎ ΡΠ΅Π³ΡΠ΅ΡΡ # 3772, Π½ΠΎ, ΠΏΠΎΡ
ΠΎΠΆΠ΅, ΡΡΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½Π°Ρ ΠΏΡΠΈΡΠΈΠ½Π°.
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΠΌΠΎΠ³ ΠΎΡΡΠ»Π΅Π΄ΠΈΡΡ ΠΎΡΠΈΠ±ΠΊΡ Π΄ΠΎ ΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π² TestCaseMethod.tpl
(Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΉ ΠΊΠΎΠ΄ Π΅ΡΡΡ ΠΈ Π² TestCaseClass.tpl
). ΠΠ±Π΅ ΡΡΠΈ ΡΡΡΠΎΠΊΠΈ ΠΏΡΡΠ°ΡΡΡΡ ΡΠΈΡΠ°ΡΡ ΠΈΠ· STDOUT
, Π±Π΅Π· ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΡΡΠΎ ΡΠΈΡΠ°Π΅ΠΌΡΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ.
ΠΡΠ»ΠΈ Ρ Π΄ΠΎΠ±Π°Π²Π»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΎΡΠ»Π°Π΄ΠΊΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ stream_get_meta_data(STDOUT)
, Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅, ΡΡΠΎ STDOUT
Π½Π΅ ΡΠΈΡΠ°Π΅ΡΡΡ:
array(9) {
["timed_out"]=>
bool(false)
["blocked"]=>
bool(true)
["eof"]=>
bool(false)
["wrapper_type"]=>
string(3) "PHP"
["stream_type"]=>
string(5) "STDIO"
["mode"]=>
string(2) "wb"
["unread_bytes"]=>
int(0)
["seekable"]=>
bool(false)
["uri"]=>
string(12) "php://stdout"
}
Π‘ΠΌΠΎΡΡΠΈΡΠ΅ ΡΠ°ΠΊΠΆΠ΅:
ΠΡΠ±ΠΎΠΉ ΡΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΈΠ·ΠΎΠ»ΡΡΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π² phpdbg
, Π½Π΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ, Π° Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ Π²ΡΠ΄Π°Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅: PHPUnit\Framework\Exception: Notice: stream_get_contents(): read of 8192 bytes failed with errno=9 Bad file descriptor in Standard input code on line 336
.
ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ ΡΡΠΎΡ ΡΠ΅ΡΡ ΠΏΠΎΠ΄ phpdbg
:
<?php
use PHPUnit\Framework\TestCase;
class ReproTest extends TestCase
{
/**
* <strong i="20">@doesNotPerformAssertions</strong>
* <strong i="21">@runInSeparateProcess</strong>
*/
public function testProcessIsolation()
{
}
}
Π ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ ΡΡΠΎΡ Π²ΡΠ²ΠΎΠ΄:
$ phpdbg -qrr vendor/bin/phpunit
PHPUnit 8.4.3 by Sebastian Bergmann and contributors.
E 1 / 1 (100%)
Time: 121 ms, Memory: 6.00 MB
There was 1 error:
1) ReproTest::testProcessIsolation
PHPUnit\Framework\Exception: Notice: stream_get_contents(): read of 8192 bytes failed with errno=9 Bad file descriptor in Standard input code on line 336
ERRORS!
Tests: 1, Assertions: 0, Errors: 1.
ΠΠ·ΠΎΠ»ΡΡΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΄Π»Ρ phpdbg
ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ
SAPI PHP.
composer info | sort
doctrine/instantiator 1.3.0 A small, lightweight utility to instantiate objects in PHP without invoking their constructors
myclabs/deep-copy 1.9.3 Create deep copies (clones) of your objects
phar-io/manifest 1.0.3 Component for reading phar.io manifest information from a PHP Archive (PHAR)
phar-io/version 2.0.1 Library for handling version information and constraints
phpdocumentor/reflection-common 2.0.0 Common reflection classes used by phpdocumentor to reflect the code structure
phpdocumentor/reflection-docblock 4.3.2 With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.
phpdocumentor/type-resolver 1.0.1 A PSR-5 based resolver of Class names, Types and Structural Element Names
phpspec/prophecy 1.9.0 Highly opinionated mocking framework for PHP 5.3+
phpunit/php-code-coverage 7.0.10 Library that provides collection, processing, and rendering functionality for PHP code coverage information.
phpunit/php-file-iterator 2.0.2 FilterIterator implementation that filters files based on a list of suffixes.
phpunit/php-text-template 1.2.1 Simple template engine.
phpunit/php-timer 2.1.2 Utility class for timing
phpunit/php-token-stream 3.1.1 Wrapper around PHP's tokenizer extension.
phpunit/phpunit 8.4.3 The PHP Unit Testing framework.
sebastian/code-unit-reverse-lookup 1.0.1 Looks up which function or method a line of code belongs to
sebastian/comparator 3.0.2 Provides the functionality to compare PHP values for equality
sebastian/diff 3.0.2 Diff implementation
sebastian/environment 4.2.3 Provides functionality to handle HHVM/PHP environments
sebastian/exporter 3.1.2 Provides the functionality to export PHP variables for visualization
sebastian/global-state 3.0.0 Snapshotting of global state
sebastian/object-enumerator 3.0.3 Traverses array structures and object graphs to enumerate all referenced objects
sebastian/object-reflector 1.1.1 Allows reflection of object attributes, including inherited and non-public ones
sebastian/recursion-context 3.0.0 Provides functionality to recursively process PHP variables
sebastian/resource-operations 2.0.1 Provides a list of PHP built-in functions that operate on resources
sebastian/type 1.1.3 Collection of value objects that represent the types of the PHP type system
sebastian/version 2.0.1 Library that helps with managing the version number of Git-hosted PHP projects
symfony/polyfill-ctype v1.13.0 Symfony polyfill for ctype functions
theseer/tokenizer 1.1.3 A small library for converting tokenized PHP source code into XML and potentially other formats
webmozart/assert 1.6.0 Assertions to validate method input/output with nice error messages.
Π― ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π°Ρ.
Π― Π½Π΅ Π±ΡΠ΄Ρ ΡΡΠ°ΡΠΈΡΡ Π²ΡΠ΅ΠΌΡ Π½Π° ΠΎΡΠ»Π°Π΄ΠΊΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π·Π°ΡΡΠ°Π³ΠΈΠ²Π°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ PHPDBG. Π§Π΅ΡΡΠ½ΠΎ Π³ΠΎΠ²ΠΎΡΡ, Ρ ΠΏΠΎΠ΄ΡΠΌΡΠ²Π°Ρ ΠΎΠ± ΡΠ΄Π°Π»Π΅Π½ΠΈΠΈ Π΅Π³ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΈΠ· ΠΏΠΎΠΊΡΡΡΠΈΡ php-code, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ°ΠΌΠΎΠ³ΠΎ PHPUnit.
ΠΡΠΎΡΡΠΎ Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°, ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ PHP ΠΎΠ½ ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠΎΠ±ΡΠΈΡ ΠΎ ΠΏΠΎΡΠΎΠΊΠ΅ ΠΊΠ°ΠΊ ΠΎ Π½Π΅ΡΠΈΡΠ°Π΅ΠΌΠΎΠΌ:
php -r 'echo stream_get_meta_data(STDOUT)["mode"], "\n";' | cat
// Outputs: wb
ΠΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΏΠ΅ΡΠ²ΡΠ΅ ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ Π² PHP 7.4.0 . ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠΎ ΠΎΡΠΈΠ±ΠΊΠ° PHP, Π½ΠΎ Ρ Π½Π΅ Π·Π½Π°Ρ.