Phpunit: عزل العملية تحت phpdbg يلقي استثناءات

تم إنشاؤها على ٣٠ نوفمبر ٢٠١٩  ·  3تعليقات  ·  مصدر: sebastianbergmann/phpunit

- الرجاء عدم الإبلاغ عن مشكلة لإصدار 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 إذا كنت تبحث عن الدعم. - يرجى إزالة هذا التعليق قبل إرسال مشكلتك.

| س | أ
| -------------------- | ---------------
| إصدار PHPUnit | 8.4.3
| إصدار PHP | 7.4.0 (phpdbg SAPI)
| طريقة التثبيت | ملحن

ملخص

يؤدي استخدام عزل العملية إلى استثناءات أقل من 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 بنفس الطريقة التي يعمل بها مع PHP SAPIs الأخرى.

ناتج 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

ال 3 كومينتر

أؤكد.

لن أستثمر الوقت في تصحيح أخطاء مشكلة تؤثر فقط على PHPDBG. لأكون صادقًا ، أفكر في إزالة الدعم من تغطية كود php وكذلك PHPUnit نفسها.

فقط من أجل مثال ، عند استخدام PHP العادي ، فإنه سيبلغ أيضًا عن الدفق على أنه غير قابل للقراءة:

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

ظهرت هذه المشكلة

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات