-
-
Notifications
You must be signed in to change notification settings - Fork 2.2k
Open
Labels
feature/test-doublesTest Stubs and Mock ObjectsTest Stubs and Mock Objectstype/backward-compatibilitySomething will be/is intentionally brokenSomething will be/is intentionally brokenversion/11Something affects PHPUnit 11Something affects PHPUnit 11version/12Something affects PHPUnit 12Something affects PHPUnit 12
Description
Q | A |
---|---|
PHPUnit version | 11.2.0 ... dev-main e0aea4c |
PHP version | 8.4.6 |
Installation Method | Composer |
Summary
Up to PHPUnit 11.1.* you can easily instantiate mock yourself. Calling methods on such objects was working fine. Since PHPUnit 11.2.0 (still broken in latest phpunit 12.x) this is no longer the case. You can still instantiate such class, but calling methods on it is broken.
Our use case was feed the FQCN of a mock class to Symfony DI container. DI container is then in charge of instantiating objects.
Ref doctrine/DoctrineBundle#2040
Issue6362Test.php
<?php declare(strict_types=1);
namespace PHPUnit\TestFixture\Issue6362;
use PHPUnit\Framework\TestCase;
interface I
{
public function m(): string;
}
final class Issue6362Test extends TestCase
{
public function testOne(): void
{
$class = $this->createStub(I::class)::class;
$o = new $class;
$o->m();
}
}
Actual
PHPUnit Started (PHPUnit 12.4-g59f70b3a79 using PHP 8.4.12 (cli) on Linux)
Test Runner Configured
Event Facade Sealed
Test Suite Loaded (1 test)
Test Runner Started
Test Suite Sorted
Test Runner Execution Started (1 test)
Test Suite Started (PHPUnit\TestFixture\Issue6362\Issue6362Test, 1 test)
Test Preparation Started (PHPUnit\TestFixture\Issue6362\Issue6362Test::testOne)
Test Prepared (PHPUnit\TestFixture\Issue6362\Issue6362Test::testOne)
Test Stub Created (PHPUnit\TestFixture\Issue6362\I)
Test Errored (PHPUnit\TestFixture\Issue6362\Issue6362Test::testOne)
Typed property TestStub_I_7653f44f::$__phpunit_state must not be accessed before initialization
Test Finished (PHPUnit\TestFixture\Issue6362\Issue6362Test::testOne)
Test Suite Finished (PHPUnit\TestFixture\Issue6362\Issue6362Test, 1 test)
Test Runner Execution Finished
Test Runner Finished
PHPUnit Finished (Shell Exit Code: 2)
Expected
PHPUnit Started (PHPUnit 12.4-g59f70b3a79 using PHP 8.4.12 (cli) on Linux)
Test Runner Configured
Event Facade Sealed
Test Suite Loaded (1 test)
Test Runner Started
Test Suite Sorted
Test Runner Execution Started (1 test)
Test Suite Started (PHPUnit\TestFixture\Issue6362\Issue6362Test, 1 test)
Test Preparation Started (PHPUnit\TestFixture\Issue6362\Issue6362Test::testOne)
Test Prepared (PHPUnit\TestFixture\Issue6362\Issue6362Test::testOne)
Test Stub Created (PHPUnit\TestFixture\Issue6362\I)
Test Passed (PHPUnit\TestFixture\Issue6362\Issue6362Test::testOne)
Test Considered Risky (PHPUnit\TestFixture\Issue6362\Issue6362Test::testOne)
This test did not perform any assertions
Test Finished (PHPUnit\TestFixture\Issue6362\Issue6362Test::testOne)
Test Suite Finished (PHPUnit\TestFixture\Issue6362\Issue6362Test, 1 test)
Test Runner Execution Finished
Test Runner Finished
PHPUnit Finished (Shell Exit Code: 0)
Metadata
Metadata
Assignees
Labels
feature/test-doublesTest Stubs and Mock ObjectsTest Stubs and Mock Objectstype/backward-compatibilitySomething will be/is intentionally brokenSomething will be/is intentionally brokenversion/11Something affects PHPUnit 11Something affects PHPUnit 11version/12Something affects PHPUnit 12Something affects PHPUnit 12