Phpunit: Isolasi proses di bawah phpdbg melempar pengecualian

Dibuat pada 30 Nov 2019  ·  3Komentar  ·  Sumber: sebastianbergmann/phpunit

- Harap jangan laporkan masalah untuk versi PHPUnit yang tidak lagi didukung. Daftar versi PHPUnit yang saat ini didukung tersedia di https://phpunit.de/supported-versions.html. - Harap jangan laporkan masalah jika Anda menggunakan versi PHP yang tidak didukung oleh versi PHPUnit yang Anda gunakan. Daftar yang menunjukkan versi PHP mana yang didukung oleh versi PHPUnit mana yang tersedia di https://phpunit.de/supported-versions.html. - Silakan isi template ini sesuai dengan masalah Anda. - Harap simpan tabel yang ditunjukkan di bawah ini di bagian atas masalah Anda. - Harap sertakan output dari "info komposer | sort" jika Anda menginstal PHPUnit menggunakan Komposer. - Harap kode pos sebagai teks (menggunakan markup yang tepat). Jangan memposting tangkapan layar kode. - Kunjungi https://phpunit.de/support.html jika Anda mencari dukungan. - Harap hapus komentar ini sebelum mengirimkan masalah Anda.

| T | A
| --------------------| ---------------
| Versi PHPUnit | 8.4.3
| versi PHP | 7.4.0 (phpdbg SAPI)
| Metode Instalasi | Komposer

Ringkasan

Penggunaan isolasi proses melempar pengecualian di bawah phpdbg . Pada awalnya saya pikir ini adalah regresi #3772, tetapi tampaknya menjadi penyebab yang terpisah.

Saya pikir dapat melacak bug ke baris ini di TestCaseMethod.tpl (ada juga kode serupa di TestCaseClass.tpl ). Kedua baris ini mencoba membaca dari STDOUT , tanpa terlebih dahulu memeriksa apakah itu aliran yang dapat dibaca.

Jika saya memasukkan pernyataan debug menggunakan stream_get_meta_data(STDOUT) , Anda dapat melihat bahwa STDOUT tidak dapat dibaca:

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"
}

Lihat juga:

Perilaku saat ini

Tes apa pun yang menggunakan isolasi proses di bawah phpdbg tidak berjalan, dan sebaliknya melemparkan pengecualian yang mirip dengan: 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 .

Cara memperbanyak

Jalankan tes ini di bawah phpdbg :

<?php

use PHPUnit\Framework\TestCase;

class ReproTest extends TestCase
{
    /**
     * <strong i="20">@doesNotPerformAssertions</strong>
     * <strong i="21">@runInSeparateProcess</strong>
     */
    public function testProcessIsolation()
    {
    }
}

Dan lihat keluaran ini:

$ 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.

Perilaku yang diharapkan

Isolasi proses harus bekerja untuk phpdbg dengan cara yang sama seperti halnya untuk SAPI PHP lainnya.

Keluaran 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.
featurprocess-isolation typbug

Semua 3 komentar

Saya mengkonfirmasi.

Saya tidak akan menginvestasikan waktu untuk men-debug masalah yang hanya memengaruhi PHPDBG. Sejujurnya, saya berpikir untuk menghapus dukungan untuk itu dari cakupan kode-php serta PHPUnit itu sendiri.

Sebagai contoh, saat menggunakan PHP biasa, itu juga akan melaporkan aliran sebagai tidak dapat dibaca:

php -r 'echo stream_get_meta_data(STDOUT)["mode"], "\n";' | cat
// Outputs: wb

Masalah ini pertama kali muncul di PHP 7.4.0 . Ini mungkin bug PHP, tapi saya tidak tahu lebih baik.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

keradus picture keradus  ·  4Komentar

keradus picture keradus  ·  3Komentar

gellis picture gellis  ·  4Komentar

stemis picture stemis  ·  3Komentar

joubertredrat picture joubertredrat  ·  4Komentar