#6595: Crash when before-class or after-class method fails with assertion failure
#6599: TeamCity logger does not wrap failures in before-test methods with testStarted and testFinished
#6601: Anonymous classes are not rejected with a clear error when creating a test double
#6603: assertArrays*IgnoringOrder() fails on mixed scalar types and on reordered nested associative arrays
MockBuilder::setMockClassName() and TestStubBuilder::setStubClassName() now reject values that are not valid unqualified PHP class identifiers, throwing the new InvalidClassNameException
The regular expression used by Generator::ensureValidMethods() to validate method names passed to MockBuilder::onlyMethods() and addMethods() was not anchored, so any string containing a valid identifier substring (including strings with parentheses, braces, comments, or newlines) was accepted
Learn how to install or update PHPUnit 13.1 in the documentation.
Support for configuring HTML code coverage report options (colors, thresholds, custom CSS) in XML configuration file without requiring an outputDirectory attribute, allowing the output directory to be specified later with the --coverage-html CLI option
Support for configuring dark mode colors, progress bar colors, and breadcrumb colors for HTML code coverage reports in the XML configuration file
Changed
#6557: Improve failure description for StringMatchesFormatDescription constraint which is used by assertFileMatchesFormat(), assertFileMatchesFormatFile(), assertStringMatchesFormat(), assertStringMatchesFormatFile(), and EXPECTF sections of PHPT test files
The HTML code coverage report now uses a more colorblind-friendly blue/amber/orange palette by default
Extracted PHPUnit\Runner\Extension\Facade from a concrete class to an interface and introduced an internal ExtensionFacade implementation, so that extensions only depend on the Facade interface while PHPUnit internally uses the ExtensionFacade class that also provides query methods
Deprecated
#6515: Deprecate the --log-events-verbose-text <file> CLI option
#6537: Soft-deprecate id() and after() for mock object expectations
#4440: Improve error when configured code coverage file list is empty
#6549: Allow to stub both hooks of non-virtual properties
Fixed
#6529: Git "detached HEAD state" in Open Test Reporting (OTR) XML logger not handled properly
#6545: Stubbing a class with set property hook leaves property uninitialized by default
The RegularExpression and StringMatchesFormatDescription did not handle preg_match() errors such as Compilation failed: regular expression is too large
Learn how to install or update PHPUnit 13.0 in the documentation.
#6450: TestCase::invokeTestMethod() method for customizing test method invocation
#6455: withParameterSetsInOrder() and withParameterSetsInAnyOrder() for expecting calls to the same method of a mock object but with different arguments
--test-files-file <file> CLI option to configure a file that contains the paths to the test files to be loaded (one file per line); use this when using CLI arguments is not an option due to argument length limitations
#6596: Backport TestCase::invokeTestMethod() method for customizing test method invocation from PHPUnit 13
Fixed
#6595: Crash when before-class or after-class method fails with assertion failure
#6599: TeamCity logger does not wrap failures in before-test methods with testStarted and testFinished
#6601: Anonymous classes are not rejected with a clear error when creating a test double
MockBuilder::setMockClassName() and TestStubBuilder::setStubClassName() now reject values that are not valid unqualified PHP class identifiers, throwing the new InvalidClassNameException
The regular expression used by Generator::ensureValidMethods() to validate method names passed to MockBuilder::onlyMethods() and addMethods() was not anchored, so any string containing a valid identifier substring (including strings with parentheses, braces, comments, or newlines) was accepted
Learn how to install or update PHPUnit 12.5 in the documentation.
#4440: Improve error when configured code coverage file list is empty
#6549: Allow to stub both hooks of non-virtual properties
Fixed
#6529: Git "detached HEAD state" in Open Test Reporting (OTR) XML logger not handled properly
#6545: Stubbing a class with set property hook leaves property uninitialized by default
The RegularExpression and StringMatchesFormatDescription did not handle preg_match() errors such as Compilation failed: regular expression is too large
Learn how to install or update PHPUnit 12.5 in the documentation.
To prevent Poisoned Pipeline Execution (PPE) attacks using prepared .coverage files in pull requests, a PHPT test will no longer be run if the temporary file for writing code coverage information already exists before the test runs
Learn how to install or update PHPUnit 12.5 in the documentation.
Attribute #[AllowMockObjectsWithoutExpectations] for excluding tests from the check that emits the notice for test methods that create a mock object but do not configure an expectation for it
Learn how to install or update PHPUnit 12.5 in the documentation.
#6308: Improve output of --check-php-configuration
The version number for the test result cache file has been incremented to reflect that its structure for PHPUnit 12.3 is not compatible with its structure for PHPUnit 8.5 and PHPUnit 9.6
#6304: PHPUnit 11.5.29 hangs when a test runner deprecation is triggered and process isolation is used (this reverts "#[IgnorePhpunitDeprecations] is now considered for test runner deprecations" from PHPUnit 12.3.1)
Learn how to install or update PHPUnit 12.3 in the documentation.
Including information about the Git repository (such as the commit hash and branch name) in the Open Test Reporting XML format is now an opt-in feature that can be enabled via the --include-git-information CLI option or the includeGitInformation attribute in the XML configuration file
#6236: failOnPhpunitWarning attribute on the <phpunit> element of the XML configuration file and --fail-on-phpunit-warning CLI option for controlling whether PHPUnit should fail on PHPUnit warnings (default: true)
PHPUnit has supported reporting test results in the JUnit XML format for a long time. Unfortunately, there has never been a standard schema for the JUnit XML format. Common consumers of Clover XML log files interpret these files differently, which has led to frequent problems.
To address this, the JUnit team started the Open Test Reporting project, creating and maintaining language-agnostic XML and HTML test reporting formats. Unlike JUnit XML, Open Test Reporting's XML formats are extensible.
Logging in the Open Test Reporting XML format is controlled by the new --log-otr CLI option and the new <otr> XML configuration element.
This feature is experimental and the generated XML may change in order to enhance compliance with the Open Test Reporting project's XML schema definitions. The same applies to the XML schema definitions for information that is specific for PHP and PHPUnit. Please note that such changes may occur in bugfix or minor releases and could potentially break backwards compatibility.
Experimental Support for OpenClover XML
PHPUnit has supported reporting code coverage information in the Clover XML format for a long time. Unfortunately, there has never been a standard schema for the Clover XML format. Common consumers of Clover XML log files interpret these files differently, which leads to frequent problems.
The original commercial Clover project has been superseded by the Open Source OpenClover project, which provides an XML schema for its OpenClover XML format. Rather than modifying the existing Clover XML reporter to comply with the OpenClover XML schema, thereby breaking backward compatibility, a new OpenClover XML reporter has been introduced.
This new reporter is controlled by the new CLI option, --coverage-openclover, and the new XML configuration element, <openclover>. This code coverage reporter generates XML documents that validate against the OpenClover project's XML schema definition, with one exception: the <testproject> element is not generated.
The existing Clover XML reporter, controlled by the --coverage-clover CLI option and the <clover> XML configuration element, remains unchanged.
This feature is experimental and the generated XML may change to enhance compliance with the OpenClover XML schema definition. Please note that such changes may occur in bugfix or minor releases and could potentially break backwards compatibility.
Miscellaneous
--with-telemetry CLI option that can be used together with --debug to print debugging information that includes telemetry information
The TestCase::provideAdditionalInformation() method can now be used to emit a Test\AdditionalInformationProvided event
The new Test\AfterLastTestMethodFailed, Test\AfterTestMethodFailed, Test\BeforeFirstTestMethodFailed, Test\BeforeTestMethodFailed, Test\PostConditionFailed, Test\PreConditionFailed events are now emitted instead of Test\AfterLastTestMethodErrored, Test\AfterTestMethodErrored, Test\BeforeFirstTestMethodErrored, Test\BeforeTestMethodErrored, Test\PostConditionErrored, Test\PreConditionErrored when the Throwable extends AssertionFailedError to distinguish between errors and failures triggered in hook methods
The new Test\PreparationErrored event is now emitted instead of Test\PreparationFailed when the Throwable does not extend AssertionFailedError to distinguish between errors and failures triggered during test preparation
Test\PreparationFailed::throwable()
Changed
#6165: Collect deprecations triggered by autoloading while loading/building the test suite
Do not treat warnings differently than other issues in summary section of default output
A warning is now emitted when both #[CoversNothing] and #[Covers*] (or #[Uses*]) are used on a test class
A warning is now emitted when the same #[Covers*] (or #[Uses*]) attribute is used multiple times on a test class
A warning is now emitted when the same code is targeted by both #[Covers*] and #[Uses*] attributes
A warning is now emitted when a hook method such as setUp(), for example has a #[Test] attribute
A warning is now emitted when more than one of #[Small], #[Medium], or #[Large] is used on a test class
A warning is now emitted when a data provider provides data sets that have more values than the test method consumes using arguments
displayDetailsOnAllIssues attribute on the <phpunit> element of the XML configuration file and --display-all-issues CLI option for controlling whether PHPUnit should display details on all issues that are triggered (default: false)
failOnAllIssues attribute on the <phpunit> element of the XML configuration file and --fail-on-all-issues CLI option for controlling whether PHPUnit should fail on all issues that are triggered (default: false)
Changed
#5956: Improved handling of deprecated E_STRICT constant
Fixed
#6192: Positive %a and %A matches are not ignored from diff when EXPECTF fails
When gathering the telemetry information that each event has, the real size of memory allocated from the operating system is no longer used as this is grown by PHP's memory manager in chunks that are so large that small(er) increases in peak memory usage cannot be seen
The peak memory usage returned by memory_get_peak_usage() is now reset immediately before the Test\Prepared event is emitted using memory_reset_peak_usage() so that (memory usage at Test\Finished - memory usage at Test\Prepared) is a better approximation of the memory usage of the test
The string representation of Telemetry\Info now uses peak memory usage instead of memory usage (this affects --log-events-verbose-text)
Fixed
#6173: Output from error_log() is not displayed when test fails
A "Before Test Method Errored" event is no longer emitted when a test is skipped in a "before test" method
#6118: expectErrorLog() for expecting error_log() output
#6126: Attribute #[WithEnvironmentVariable] for setting an environment variable for the duration of a test
The AfterTestMethodCalled, AfterTestMethodErrored, AfterTestMethodFinished, BeforeTestMethodCalled, BeforeTestMethodErrored, BeforeTestMethodFinished, PostConditionCalled, PostConditionErrored, PostConditionFinished, PreConditionCalled, PreConditionErrored, and PreConditionFinished event value objects now have test() method that returns a value object representing the test method for which the hook method was called
Changed
When code coverage processing is requested and no static analysis cache directory has been configured then a cache directory in the operating system's path used for temporary files is automatically created and used
The static analysis of first-party source files required for the code coverage functionality is now performed before the first test is run, if code coverage processing is requested (via the XML configuration file and/or CLI options), all first-party source files are configured to be processed (which is the default), and a static analysis cache directory is available (either explicitly configured or automatically determined, see above). This has the same effect as running phpunit --warm-coverage-cache before running tests.
Deprecated
#6140: The testClassName() method on the AfterTestMethodCalled, AfterTestMethodErrored, AfterTestMethodFinished, BeforeTestMethodCalled, BeforeTestMethodErrored, BeforeTestMethodFinished, PostConditionCalled, PostConditionErrored, PostConditionFinished, PreConditionCalled, PreConditionErrored, and PreConditionFinished event value objects (use test()->className() instead)
TestCase::__construct() is now declared final (it was annotated with @final before and the announced changed from @final to final for PHPUnit 12 was forgotten)
Fixed
#5951: Restore the includeUncoveredFiles configuration option
#6133: Precision loss in aggregated test suite execution time(s) reported by JUnit XML logger
A Test\PreparationFailed event is now emitted in addition to a Test\Errored event when an unexpected exception is triggered in a before-test method
A Test\Passed event is no longer emitted in addition to a Test\Failed or Test\Errored event when an assertion failure or an unexpected exception is triggered in an after-test method
A TestSuite\Finished event is now emitted when a before-first-test method errors
#5872: The default value for shortenArraysForExportThreshold is now 10 (limit export of arrays to 10 levels) instead of 0 (do not limit export of arrays)
Deprecated
#6053: Assert::isType() (was soft-deprecated in PHPUnit 11.5)
#6056: assertContainsOnly() (was soft-deprecated in PHPUnit 11.5)
#6056: assertNotContainsOnly() (was soft-deprecated in PHPUnit 11.5)
#6060: containsOnly() (was soft-deprecated in PHPUnit 11.5)
This PR contains the following updates:
| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|
| [phpunit/phpunit](https://phpunit.de/) ([source](https://github.com/sebastianbergmann/phpunit)) | `^11.5.3` → `^13.0.0` |  |  |
---
### Release Notes
<details>
<summary>sebastianbergmann/phpunit (phpunit/phpunit)</summary>
### [`v13.1.9`](https://github.com/sebastianbergmann/phpunit/releases/tag/13.1.9): PHPUnit 13.1.9
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/13.1.8...13.1.9)
##### Changed
- A `Test` or `Tests` prefix is no longer stripped from class names when they are processed for TestDox output
##### Fixed
- [#​6605](https://github.com/sebastianbergmann/phpunit/issues/6605): Data set names and provider values containing Unicode bidirectional control characters distort terminal output
- [#​6610](https://github.com/sebastianbergmann/phpunit/issues/6610): Per-testsuite bootstrap script not loaded in process isolation
- TestDox output collapsed separate test classes into a single group when their prettified class names matched
***
Learn how to install or update PHPUnit 13.1 in the [documentation](https://docs.phpunit.de/en/13.1/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v13.1.8`](https://github.com/sebastianbergmann/phpunit/releases/tag/13.1.8): PHPUnit 13.1.8
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/13.1.7...13.1.8)
##### Fixed
- [#​6595](https://github.com/sebastianbergmann/phpunit/issues/6595): Crash when before-class or after-class method fails with assertion failure
- [#​6599](https://github.com/sebastianbergmann/phpunit/issues/6599): TeamCity logger does not wrap failures in before-test methods with `testStarted` and `testFinished`
- [#​6601](https://github.com/sebastianbergmann/phpunit/issues/6601): Anonymous classes are not rejected with a clear error when creating a test double
- [#​6603](https://github.com/sebastianbergmann/phpunit/issues/6603): `assertArrays*IgnoringOrder()` fails on mixed scalar types and on reordered nested associative arrays
- `MockBuilder::setMockClassName()` and `TestStubBuilder::setStubClassName()` now reject values that are not valid unqualified PHP class identifiers, throwing the new `InvalidClassNameException`
- The regular expression used by `Generator::ensureValidMethods()` to validate method names passed to `MockBuilder::onlyMethods()` and `addMethods()` was not anchored, so any string containing a valid identifier substring (including strings with parentheses, braces, comments, or newlines) was accepted
***
Learn how to install or update PHPUnit 13.1 in the [documentation](https://docs.phpunit.de/en/13.1/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v13.1.7`](https://github.com/sebastianbergmann/phpunit/releases/tag/13.1.7): PHPUnit 13.1.7
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/13.1.6...13.1.7)
##### Changed
- Pass `LIBXML_NONET` when parsing/validating XML configuration files to make explicit that no network I/O is performed
- Verify the result file written by an isolated child process with a random nonce before deserializing it
***
Learn how to install or update PHPUnit 13.1 in the [documentation](https://docs.phpunit.de/en/13.1/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v13.1.6`](https://github.com/sebastianbergmann/phpunit/releases/tag/13.1.6): PHPUnit 13.1.6
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/13.1.5...13.1.6)
##### Fixed
- [#​6590](https://github.com/sebastianbergmann/phpunit/issues/6590): Silent failure when configuration file is invalid
- [#​6592](https://github.com/sebastianbergmann/phpunit/pull/6592): INI metacharacters `;` and `"` are not preserved when forwarding settings to child processes
***
Learn how to install or update PHPUnit 13.1 in the [documentation](https://docs.phpunit.de/en/13.1/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v13.1.5`](https://github.com/sebastianbergmann/phpunit/releases/tag/13.1.5): PHPUnit 13.1.5
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/13.1.4...13.1.5)
##### Fixed
- [#​5860](https://github.com/sebastianbergmann/phpunit/issues/5860): PHP CLI `-d` settings are not forwarded to child processes for process isolation
- [#​6451](https://github.com/sebastianbergmann/phpunit/issues/6451): Incomplete version in `RequiresPhp` (e.g. `<=8.5`) is compared against full PHP version, causing unexpected skips
- [#​6589](https://github.com/sebastianbergmann/phpunit/issues/6589): `dataSetAsStringWithData()` raises "float is not representable as int" warning for large floats in data sets
***
Learn how to install or update PHPUnit 13.1 in the [documentation](https://docs.phpunit.de/en/13.1/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v13.1.4`](https://github.com/sebastianbergmann/phpunit/releases/tag/13.1.4): PHPUnit 13.1.4
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/13.1.3...13.1.4)
##### Fixed
- [#​5993](https://github.com/sebastianbergmann/phpunit/issues/5993): `DefaultJobRunner` deadlocks on child processes that write large amounts of stderr output
- [#​6465](https://github.com/sebastianbergmann/phpunit/issues/6465): SAPI-populated `$_SERVER` entries leak from parent into child process
- [#​6587](https://github.com/sebastianbergmann/phpunit/issues/6587): `failOnEmptyTestSuite="false"` in `phpunit.xml` is ignored when `--group`/`--filter`/`--testsuite` matches no tests
- [#​6588](https://github.com/sebastianbergmann/phpunit/issues/6588): Order of issue baseline entries is not canonicalized
***
Learn how to install or update PHPUnit 13.1 in the [documentation](https://docs.phpunit.de/en/13.1/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v13.1.3`](https://github.com/sebastianbergmann/phpunit/releases/tag/13.1.3): PHPUnit 13.1.3
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/13.1.2...13.1.3)
##### Fixed
- Regression in XML configuration migration introduced in PHPUnit 12.5.8
***
Learn how to install or update PHPUnit 13.1 in the [documentation](https://docs.phpunit.de/en/13.1/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v13.1.2`](https://github.com/sebastianbergmann/phpunit/releases/tag/13.1.2): PHPUnit 13.1.2
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/13.1.1...13.1.2)
##### Fixed
- [#​4571](https://github.com/sebastianbergmann/phpunit/issues/4571): No warning when `--random-order-seed` is used when test execution order is not random
- [#​4975](https://github.com/sebastianbergmann/phpunit/issues/4975): `--filter` does not work when filter string starts with `#`
- [#​5354](https://github.com/sebastianbergmann/phpunit/issues/5354): JUnit XML logger does not handle `TestSuiteSkipped` event
- [#​6276](https://github.com/sebastianbergmann/phpunit/issues/6276): Exit with non-zero exit code when explicit test selection (`--filter`, `--group`, `--testsuite`) yields no tests
- [#​6583](https://github.com/sebastianbergmann/phpunit/issues/6583): Failing output expectation skips `tearDown()` and handler restoration, causing subsequent tests to be marked as risky
***
Learn how to install or update PHPUnit 13.1 in the [documentation](https://docs.phpunit.de/en/13.1/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v13.1.1`](https://github.com/sebastianbergmann/phpunit/releases/tag/13.1.1): PHPUnit 13.1.1
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/13.1.0...13.1.1)
##### Changed
- [#​3676](https://github.com/sebastianbergmann/phpunit/issues/3676): Include class/interface name in mock object expectation failure messages
- [#​4793](https://github.com/sebastianbergmann/phpunit/issues/4793): Exit with non-zero exit code when `exit` was called from some test
##### Fixed
- [#​5881](https://github.com/sebastianbergmann/phpunit/issues/5881): `colors="true"` in XML configuration file does not unconditionally enable colored output
- [#​6019](https://github.com/sebastianbergmann/phpunit/issues/6019): `--migrate-configuration` does not update schema location when XML content already validates against current schema
- [#​6372](https://github.com/sebastianbergmann/phpunit/issues/6372): Assertion failure inside `willReturnCallback()` is silently swallowed when code under test catches exceptions
- [#​6464](https://github.com/sebastianbergmann/phpunit/issues/6464): Process isolation template unconditionally calls `set_include_path()`
- [#​6571](https://github.com/sebastianbergmann/phpunit/issues/6571): Static analysis errors for `TestDoubleBuilder` method chaining
***
Learn how to install or update PHPUnit 13.1 in the [documentation](https://docs.phpunit.de/en/13.1/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v13.1.0`](https://github.com/sebastianbergmann/phpunit/releases/tag/13.1.0): PHPUnit 13.1.0
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/13.0.6...13.1.0)
##### Added
- [#​6501](https://github.com/sebastianbergmann/phpunit/issues/6501): Include unexpected output in Open Test Reporting (OTR) XML logfile
- [#​6517](https://github.com/sebastianbergmann/phpunit/issues/6517): `includeInCodeCoverage` attribute for `<directory>` and `<file>` children of `<source>`
- [#​6523](https://github.com/sebastianbergmann/phpunit/issues/6523): Include `#[Group]` information in Open Test Reporting (OTR) XML logfile
- [#​6524](https://github.com/sebastianbergmann/phpunit/pull/6524): Report issues in Open Test Reporting (OTR) XML logfile
- [#​6526](https://github.com/sebastianbergmann/phpunit/pull/6526): Introduce `#[DataProviderClosure]` for static closures
- [#​6530](https://github.com/sebastianbergmann/phpunit/issues/6530): Support for custom issue trigger resolvers that can be configured using `<issueTriggerResolvers>` in the XML configuration file
- [#​6547](https://github.com/sebastianbergmann/phpunit/pull/6547): Support for `%r...%r` in `EXPECTF` section
- Support for configuring HTML code coverage report options (colors, thresholds, custom CSS) in XML configuration file without requiring an `outputDirectory` attribute, allowing the output directory to be specified later with the `--coverage-html` CLI option
- Support for configuring dark mode colors, progress bar colors, and breadcrumb colors for HTML code coverage reports in the XML configuration file
##### Changed
- [#​6557](https://github.com/sebastianbergmann/phpunit/pull/6557): Improve failure description for `StringMatchesFormatDescription` constraint which is used by `assertFileMatchesFormat()`, `assertFileMatchesFormatFile()`, `assertStringMatchesFormat()`, `assertStringMatchesFormatFile()`, and `EXPECTF` sections of PHPT test files
- The HTML code coverage report now uses a more colorblind-friendly blue/amber/orange palette by default
- Extracted `PHPUnit\Runner\Extension\Facade` from a concrete class to an interface and introduced an internal `ExtensionFacade` implementation, so that extensions only depend on the `Facade` interface while PHPUnit internally uses the `ExtensionFacade` class that also provides query methods
##### Deprecated
- [#​6515](https://github.com/sebastianbergmann/phpunit/issues/6515): Deprecate the `--log-events-verbose-text <file>` CLI option
- [#​6537](https://github.com/sebastianbergmann/phpunit/issues/6537): Soft-deprecate `id()` and `after()` for mock object expectations
##### Fixed
- [#​6025](https://github.com/sebastianbergmann/phpunit/issues/6025): `FILE_EXTERNAL` breaks `__DIR__`
- [#​6351](https://github.com/sebastianbergmann/phpunit/issues/6351): No warning when the same test runner extension is configured more than once
- [#​6433](https://github.com/sebastianbergmann/phpunit/issues/6433): Logic in `TestSuiteLoader` is brittle and causes "Class FooTest not found" even for valid tests in valid filenames
- [#​6463](https://github.com/sebastianbergmann/phpunit/issues/6463): Process Isolation fails on non-serializable globals and quietly ignore closures
***
Learn how to install or update PHPUnit 13.1 in the [documentation](https://docs.phpunit.de/en/13.1/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v13.0.6`](https://github.com/sebastianbergmann/phpunit/releases/tag/13.0.6): PHPUnit 13.0.6
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/13.0.5...13.0.6)
##### Changed
- [#​4440](https://github.com/sebastianbergmann/phpunit/issues/4440): Improve error when configured code coverage file list is empty
- [#​6549](https://github.com/sebastianbergmann/phpunit/pull/6549): Allow to stub both hooks of non-virtual properties
##### Fixed
- [#​6529](https://github.com/sebastianbergmann/phpunit/pull/6529): Git "detached HEAD state" in Open Test Reporting (OTR) XML logger not handled properly
- [#​6545](https://github.com/sebastianbergmann/phpunit/issues/6545): Stubbing a class with set property hook leaves property uninitialized by default
- The `RegularExpression` and `StringMatchesFormatDescription` did not handle `preg_match()` errors such as `Compilation failed: regular expression is too large`
***
Learn how to install or update PHPUnit 13.0 in the [documentation](https://docs.phpunit.de/en/13.0/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v13.0.5`](https://github.com/sebastianbergmann/phpunit/releases/tag/13.0.5): PHPUnit 13.0.5
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/13.0.4...13.0.5)
##### Fixed
- [#​6521](https://github.com/sebastianbergmann/phpunit/issues/6521): Performance regression in PHPUnit 11.5.54, PHPUnit 12.5.13, and PHPUnit 13.0.4
***
Learn how to install or update PHPUnit 13.0 in the [documentation](https://docs.phpunit.de/en/13.0/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v13.0.4`](https://github.com/sebastianbergmann/phpunit/releases/tag/13.0.4): PHPUnit 13.0.4
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/13.0.3...13.0.4)
##### Fixed
- [#​6489](https://github.com/sebastianbergmann/phpunit/pull/6489): Classification of self/direct/indirect deprecation triggers is not aligned with Symfony's bridge for PHPUnit
***
Learn how to install or update PHPUnit 13.0 in the [documentation](https://docs.phpunit.de/en/13.0/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v13.0.3`](https://github.com/sebastianbergmann/phpunit/releases/tag/13.0.3): PHPUnit 13.0.3
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/13.0.2...13.0.3)
##### Fixed
- [#​6511](https://github.com/sebastianbergmann/phpunit/issues/6511): TestDox variables out of order with named arguments
- [#​6514](https://github.com/sebastianbergmann/phpunit/issues/6514): `<ini />` can silently fail
***
Learn how to install or update PHPUnit 13.0 in the [documentation](https://docs.phpunit.de/en/13.0/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v13.0.2`](https://github.com/sebastianbergmann/phpunit/releases/tag/13.0.2): PHPUnit 13.0.2
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/13.0.1...13.0.2)
##### Deprecated
- [#​6505](https://github.com/sebastianbergmann/phpunit/issues/6505): Calling `atLeast()` with an argument that is not positive
- [#​6507](https://github.com/sebastianbergmann/phpunit/issues/6507): Support for using `with*()` without `expects()`
##### Fixed
- [#​6503](https://github.com/sebastianbergmann/phpunit/issues/6503): Temporary file used by `SourceMapper` may be deleted prematurely when multiple PHPUnit processes run in parallel
- [#​6509](https://github.com/sebastianbergmann/phpunit/issues/6509): "No expectations were configured for the mock object ..." notice is emitted when `with()` is used without `expects()`
***
Learn how to install or update PHPUnit 13.0 in the [documentation](https://docs.phpunit.de/en/13.0/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v13.0.1`](https://github.com/sebastianbergmann/phpunit/releases/tag/13.0.1): PHPUnit 13.0.1
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/13.0.0...13.0.1)
##### Fixed
- [#​6495](https://github.com/sebastianbergmann/phpunit/pull/6495): Source map for issue trigger identification is regenerated in process isolation child processes
- [#​6497](https://github.com/sebastianbergmann/phpunit/issues/6497): `method()` returns `InvocationMocker` instead of `InvocationStubber` for test stubs
***
Learn how to install or update PHPUnit 13.0 in the [documentation](https://docs.phpunit.de/en/13.0/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v13.0.0`](https://github.com/sebastianbergmann/phpunit/releases/tag/13.0.0): PHPUnit 13.0.0
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.5.25...13.0.0)
##### Added
- [#​6450](https://github.com/sebastianbergmann/phpunit/issues/6450): `TestCase::invokeTestMethod()` method for customizing test method invocation
- [#​6455](https://github.com/sebastianbergmann/phpunit/issues/6455): `withParameterSetsInOrder()` and `withParameterSetsInAnyOrder()` for expecting calls to the same method of a mock object but with different arguments
- [#​6466](https://github.com/sebastianbergmann/phpunit/issues/6466): Sealed test doubles
- [#​6468](https://github.com/sebastianbergmann/phpunit/issues/6468): Configuration option to require sealed mock objects
- [#​6477](https://github.com/sebastianbergmann/phpunit/pull/6477): `assertArraysAreIdentical()`, `assertArraysAreIdenticalIgnoringOrder()`, `assertArraysHaveIdenticalValues()`, `assertArraysHaveIdenticalValuesIgnoringOrder()`, `assertArraysAreEqual()`, `assertArraysAreEqualIgnoringOrder()`, `assertArraysHaveEqualValues()`, and `assertArraysHaveEqualValuesIgnoringOrder()` assertions
- `--test-files-file <file>` CLI option to configure a file that contains the paths to the test files to be loaded (one file per line); use this when using CLI arguments is not an option due to argument length limitations
##### Deprecated
- [#​6461](https://github.com/sebastianbergmann/phpunit/issues/6461): `any()` matcher (hard deprecation)
##### Removed
- [#​6054](https://github.com/sebastianbergmann/phpunit/issues/6054): `Assert::isType()`
- [#​6057](https://github.com/sebastianbergmann/phpunit/issues/6057): `assertContainsOnly()` and `assertNotContainsOnly()`
- [#​6061](https://github.com/sebastianbergmann/phpunit/issues/6061): `containsOnly()`
- [#​6076](https://github.com/sebastianbergmann/phpunit/issues/6076): Support for PHP 8.3
- [#​6141](https://github.com/sebastianbergmann/phpunit/issues/6141): `testClassName()` method on event value objects for hook methods called for test methods
- [#​6230](https://github.com/sebastianbergmann/phpunit/issues/6230): `Configuration::includeTestSuite()` and `Configuration::excludeTestSuite()`
- [#​6241](https://github.com/sebastianbergmann/phpunit/issues/6241): `--dont-report-useless-tests` CLI option
- [#​6247](https://github.com/sebastianbergmann/phpunit/issues/6247): Support for using `#[CoversNothing]` on a test method
- [#​6285](https://github.com/sebastianbergmann/phpunit/issues/6285): `#[RunClassInSeparateProcess]` attribute
- [#​6356](https://github.com/sebastianbergmann/phpunit/issues/6356): Support for version constraint string argument without explicit version comparison operator
***
Learn how to install or update PHPUnit 13.0 in the [documentation](https://docs.phpunit.de/en/13.0/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v12.5.25`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.5.25): PHPUnit 12.5.25
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.5.24...12.5.25)
##### Changed
- A `Test` or `Tests` prefix is no longer stripped from class names when they are processed for TestDox output
##### Fixed
- [#​6605](https://github.com/sebastianbergmann/phpunit/issues/6605): Data set names and provider values containing Unicode bidirectional control characters distort terminal output
- [#​6610](https://github.com/sebastianbergmann/phpunit/issues/6610): Per-testsuite bootstrap script not loaded in process isolation
- TestDox output collapsed separate test classes into a single group when their prettified class names matched
***
Learn how to install or update PHPUnit 12.5 in the [documentation](https://docs.phpunit.de/en/12.5/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v12.5.24`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.5.24): PHPUnit 12.5.24
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.5.23...12.5.24)
##### Added
- [#​6596](https://github.com/sebastianbergmann/phpunit/issues/6596): Backport `TestCase::invokeTestMethod()` method for customizing test method invocation from PHPUnit 13
##### Fixed
- [#​6595](https://github.com/sebastianbergmann/phpunit/issues/6595): Crash when before-class or after-class method fails with assertion failure
- [#​6599](https://github.com/sebastianbergmann/phpunit/issues/6599): TeamCity logger does not wrap failures in before-test methods with `testStarted` and `testFinished`
- [#​6601](https://github.com/sebastianbergmann/phpunit/issues/6601): Anonymous classes are not rejected with a clear error when creating a test double
- `MockBuilder::setMockClassName()` and `TestStubBuilder::setStubClassName()` now reject values that are not valid unqualified PHP class identifiers, throwing the new `InvalidClassNameException`
- The regular expression used by `Generator::ensureValidMethods()` to validate method names passed to `MockBuilder::onlyMethods()` and `addMethods()` was not anchored, so any string containing a valid identifier substring (including strings with parentheses, braces, comments, or newlines) was accepted
***
Learn how to install or update PHPUnit 12.5 in the [documentation](https://docs.phpunit.de/en/12.5/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v12.5.23`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.5.23): PHPUnit 12.5.23
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.5.22...12.5.23)
##### Changed
- Pass `LIBXML_NONET` when parsing/validating XML configuration files to make explicit that no network I/O is performed
- Verify the result file written by an isolated child process with a random nonce before deserializing it
***
Learn how to install or update PHPUnit 12.5 in the [documentation](https://docs.phpunit.de/en/12.5/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v12.5.22`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.5.22): PHPUnit 12.5.22
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.5.21...12.5.22)
##### Fixed
- [#​6590](https://github.com/sebastianbergmann/phpunit/issues/6590): Silent failure when configuration file is invalid
- [#​6592](https://github.com/sebastianbergmann/phpunit/pull/6592): INI metacharacters `;` and `"` are not preserved when forwarding settings to child processes
***
Learn how to install or update PHPUnit 12.5 in the [documentation](https://docs.phpunit.de/en/12.5/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v12.5.21`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.5.21): PHPUnit 12.5.21
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.5.20...12.5.21)
##### Fixed
- [#​5860](https://github.com/sebastianbergmann/phpunit/issues/5860): PHP CLI `-d` settings are not forwarded to child processes for process isolation
- [#​6451](https://github.com/sebastianbergmann/phpunit/issues/6451): Incomplete version in `RequiresPhp` (e.g. `<=8.5`) is compared against full PHP version, causing unexpected skips
***
Learn how to install or update PHPUnit 12.5 in the [documentation](https://docs.phpunit.de/en/12.5/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v12.5.20`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.5.20): PHPUnit 12.5.20
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.5.19...12.5.20)
##### Fixed
- [#​5993](https://github.com/sebastianbergmann/phpunit/issues/5993): `DefaultJobRunner` deadlocks on child processes that write large amounts of stderr output
- [#​6465](https://github.com/sebastianbergmann/phpunit/issues/6465): SAPI-populated `$_SERVER` entries leak from parent into child process
- [#​6587](https://github.com/sebastianbergmann/phpunit/issues/6587): `failOnEmptyTestSuite="false"` in `phpunit.xml` is ignored when `--group`/`--filter`/`--testsuite` matches no tests
- [#​6588](https://github.com/sebastianbergmann/phpunit/issues/6588): Order of issue baseline entries is not canonicalized
***
Learn how to install or update PHPUnit 12.5 in the [documentation](https://docs.phpunit.de/en/12.5/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v12.5.19`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.5.19): PHPUnit 12.5.19
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.5.18...12.5.19)
##### Fixed
- Regression in XML configuration migration introduced in PHPUnit 12.5.8
***
Learn how to install or update PHPUnit 12.5 in the [documentation](https://docs.phpunit.de/en/12.5/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v12.5.18`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.5.18): PHPUnit 12.5.18
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.5.17...12.5.18)
##### Fixed
- [#​4571](https://github.com/sebastianbergmann/phpunit/issues/4571): No warning when `--random-order-seed` is used when test execution order is not random
- [#​4975](https://github.com/sebastianbergmann/phpunit/issues/4975): `--filter` does not work when filter string starts with `#`
- [#​5354](https://github.com/sebastianbergmann/phpunit/issues/5354): JUnit XML logger does not handle `TestSuiteSkipped` event
- [#​6276](https://github.com/sebastianbergmann/phpunit/issues/6276): Exit with non-zero exit code when explicit test selection (`--filter`, `--group`, `--testsuite`) yields no tests
- [#​6583](https://github.com/sebastianbergmann/phpunit/issues/6583): Failing output expectation skips `tearDown()` and handler restoration, causing subsequent tests to be marked as risky
***
Learn how to install or update PHPUnit 12.5 in the [documentation](https://docs.phpunit.de/en/12.5/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v12.5.17`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.5.17): PHPUnit 12.5.17
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.5.16...12.5.17)
##### Changed
- [#​4793](https://github.com/sebastianbergmann/phpunit/issues/4793): Exit with non-zero exit code when `exit` was called from some test
##### Fixed
- [#​5881](https://github.com/sebastianbergmann/phpunit/issues/5881): `colors="true"` in XML configuration file does not unconditionally enable colored output
- [#​6019](https://github.com/sebastianbergmann/phpunit/issues/6019): `--migrate-configuration` does not update schema location when XML content already validates against current schema
- [#​6372](https://github.com/sebastianbergmann/phpunit/issues/6372): Assertion failure inside `willReturnCallback()` is silently swallowed when code under test catches exceptions
- [#​6464](https://github.com/sebastianbergmann/phpunit/issues/6464): Process isolation template unconditionally calls `set_include_path()`
- [#​6571](https://github.com/sebastianbergmann/phpunit/issues/6571): Static analysis errors for `TestDoubleBuilder` method chaining
***
Learn how to install or update PHPUnit 12.5 in the [documentation](https://docs.phpunit.de/en/12.5/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v12.5.16`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.5.16): PHPUnit 12.5.16
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.5.15...12.5.16)
##### Added
- [#​6547](https://github.com/sebastianbergmann/phpunit/pull/6547): Support for `%r...%r` in `EXPECTF` section
##### Fixed
- [#​6025](https://github.com/sebastianbergmann/phpunit/issues/6025): `FILE_EXTERNAL` breaks `__DIR__`
- [#​6351](https://github.com/sebastianbergmann/phpunit/issues/6351): No warning when the same test runner extension is configured more than once
- [#​6433](https://github.com/sebastianbergmann/phpunit/issues/6433): Logic in `TestSuiteLoader` is brittle and causes "Class FooTest not found" even for valid tests in valid filenames
- [#​6463](https://github.com/sebastianbergmann/phpunit/issues/6463): Process Isolation fails on non-serializable globals and quietly ignore closures
***
Learn how to install or update PHPUnit 12.5 in the [documentation](https://docs.phpunit.de/en/12.5/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v12.5.15`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.5.15): PHPUnit 12.5.15
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.5.14...12.5.15)
##### Changed
- [#​4440](https://github.com/sebastianbergmann/phpunit/issues/4440): Improve error when configured code coverage file list is empty
- [#​6549](https://github.com/sebastianbergmann/phpunit/pull/6549): Allow to stub both hooks of non-virtual properties
##### Fixed
- [#​6529](https://github.com/sebastianbergmann/phpunit/pull/6529): Git "detached HEAD state" in Open Test Reporting (OTR) XML logger not handled properly
- [#​6545](https://github.com/sebastianbergmann/phpunit/issues/6545): Stubbing a class with set property hook leaves property uninitialized by default
- The `RegularExpression` and `StringMatchesFormatDescription` did not handle `preg_match()` errors such as `Compilation failed: regular expression is too large`
***
Learn how to install or update PHPUnit 12.5 in the [documentation](https://docs.phpunit.de/en/12.5/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v12.5.14`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.5.14): PHPUnit 12.5.14
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.5.13...12.5.14)
##### Fixed
- [#​6521](https://github.com/sebastianbergmann/phpunit/issues/6521): Performance regression in PHPUnit 11.5.54, PHPUnit 12.5.13, and PHPUnit 13.0.4
***
Learn how to install or update PHPUnit 12.5 in the [documentation](https://docs.phpunit.de/en/12.5/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v12.5.13`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.5.13): PHPUnit 12.5.13
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.5.12...12.5.13)
##### Fixed
- [#​6489](https://github.com/sebastianbergmann/phpunit/pull/6489): Classification of self/direct/indirect deprecation triggers is not aligned with Symfony's bridge for PHPUnit
***
Learn how to install or update PHPUnit 12.5 in the [documentation](https://docs.phpunit.de/en/12.5/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v12.5.12`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.5.12): PHPUnit 12.5.12
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.5.11...12.5.12)
##### Fixed
- [#​6511](https://github.com/sebastianbergmann/phpunit/issues/6511): TestDox variables out of order with named arguments
- [#​6514](https://github.com/sebastianbergmann/phpunit/issues/6514): `<ini />` can silently fail
***
Learn how to install or update PHPUnit 12.5 in the [documentation](https://docs.phpunit.de/en/12.5/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v12.5.11`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.5.11): PHPUnit 12.5.11
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.5.10...12.5.11)
##### Deprecated
- [#​6510](https://github.com/sebastianbergmann/phpunit/issues/6510): Deprecate using `with*()` on test stubs
##### Fixed
- [#​6503](https://github.com/sebastianbergmann/phpunit/issues/6503): Temporary file used by `SourceMapper` may be deleted prematurely when multiple PHPUnit processes run in parallel
- [#​6509](https://github.com/sebastianbergmann/phpunit/issues/6509): "No expectations were configured for the mock object ..." notice is emitted when `with()` is used without `expects()`
***
Learn how to install or update PHPUnit 12.5 in the [documentation](https://docs.phpunit.de/en/12.5/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v12.5.10`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.5.10): PHPUnit 12.5.10
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.5.9...12.5.10)
##### Fixed
- [#​6495](https://github.com/sebastianbergmann/phpunit/pull/6495): Source map for issue trigger identification is regenerated in process isolation child processes
***
Learn how to install or update PHPUnit 12.5 in the [documentation](https://docs.phpunit.de/en/12.5/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v12.5.9`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.5.9): PHPUnit 12.5.9
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.5.8...12.5.9)
##### Added
- [#​6488](https://github.com/sebastianbergmann/phpunit/issues/6488): Allow disabling issue trigger identification for improved performance
##### Fixed
- [#​6486](https://github.com/sebastianbergmann/phpunit/issues/6486): Incorrect file name reported for errors for test methods declared in traits
- [#​6490](https://github.com/sebastianbergmann/phpunit/pull/6490): Incorrect test count when tests are skipped in before-class method
***
Learn how to install or update PHPUnit 12.5 in the [documentation](https://docs.phpunit.de/en/12.5/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v12.5.8`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.5.8): PHPUnit 12.5.8
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.5.7...12.5.8)
##### Changed
- To prevent Poisoned Pipeline Execution (PPE) attacks using prepared `.coverage` files in pull requests, a PHPT test will no longer be run if the temporary file for writing code coverage information already exists before the test runs
***
Learn how to install or update PHPUnit 12.5 in the [documentation](https://docs.phpunit.de/en/12.5/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v12.5.7`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.5.7): PHPUnit 12.5.7
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.5.6...12.5.7)
##### Fixed
- [#​6362](https://github.com/sebastianbergmann/phpunit/issues/6362): Manually instantiated test doubles are broken since PHPUnit 11.2
- [#​6470](https://github.com/sebastianbergmann/phpunit/issues/6470): Infinite recursion in `Count::getCountOf()` for unusal implementations of `Iterator` or `IteratorAggregate`
***
Learn how to install or update PHPUnit 12.5 in the [documentation](https://docs.phpunit.de/en/12.5/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v12.5.6`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.5.6): PHPUnit 12.5.6
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.5.5...12.5.6)
##### Changed
- Reverted a change that caused a [build failure](https://github.com/php/php-src/actions/runs/21052584327/job/60542023395#step:14:3729) for the [PHP project's nightly community job](https://phpunit.expert/articles/how-php-and-its-ecosystem-test-each-other.html?ref=github)
***
Learn how to install or update PHPUnit 12.5 in the [documentation](https://docs.phpunit.de/en/12.5/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v12.5.5`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.5.5): PHPUnit 12.5.5
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.5.4...12.5.5)
##### Deprecated
- [#​6461](https://github.com/sebastianbergmann/phpunit/issues/6461): `any()` matcher (soft deprecation)
##### Fixed
- [#​6470](https://github.com/sebastianbergmann/phpunit/issues/6470): Mocking a class with a property hook setter accepting more types than the property results in a fatal error
***
Learn how to install or update PHPUnit 12.5 in the [documentation](https://docs.phpunit.de/en/12.5/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v12.5.4`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.5.4): PHPUnit 12.5.4
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.5.3...12.5.4)
##### Changed
- The `#[AllowMockObjectsWithoutExpectations]` attribute can now be used on the method level
##### Fixed
- [#​6446](https://github.com/sebastianbergmann/phpunit/issues/6446): Test runner crashes with `Timer::start() has to be called before Timer::stop()`
***
Learn how to install or update PHPUnit 12.5 in the [documentation](https://docs.phpunit.de/en/12.5/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v12.5.3`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.5.3): PHPUnit 12.5.3
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.5.2...12.5.3)
##### Changed
- The message emitted when a test method creates a mock object but does not configure any expectations for it has been improved
***
Learn how to install or update PHPUnit 12.5 in the [documentation](https://docs.phpunit.de/en/12.5/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v12.5.2`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.5.2): PHPUnit 12.5.2
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.5.1...12.5.2)
##### Added
- Attribute `#[AllowMockObjectsWithoutExpectations]` for excluding tests from the check that emits the notice for test methods that create a mock object but do not configure an expectation for it
***
Learn how to install or update PHPUnit 12.5 in the [documentation](https://docs.phpunit.de/en/12.5/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v12.5.1`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.5.1): PHPUnit 12.5.1
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.5.0...12.5.1)
##### Added
- `TestCase::getStubBuilder()` (analogous to `TestCase::getMockBuilder()`) for creating (partial) test stubs using a fluent API
***
Learn how to install or update PHPUnit 12.5 in the [documentation](https://docs.phpunit.de/en/12.5/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v12.5.0`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.5.0): PHPUnit 12.5.0
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.4.5...12.5.0)
##### Added
- [#​6376](https://github.com/sebastianbergmann/phpunit/issues/6376): `--all` CLI option to ignore test selection configured in XML configuration file
- [#​6422](https://github.com/sebastianbergmann/phpunit/issues/6422): Make `<source>` element in XML code coverage report optional
##### Changed
- [#​6380](https://github.com/sebastianbergmann/phpunit/pull/6380): Allow `Throwable` in `expectExceptionObject()`
- A PHPUnit notice is now emitted for test methods that create a mock object but do not configure an expectation for it
***
Learn how to install or update PHPUnit 12.5 in the [documentation](https://docs.phpunit.de/en/12.5/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v12.4.5`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.4.5): PHPUnit 12.4.5
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.4.4...12.4.5)
##### Changed
- Updated list of deprecated PHP configuration settings for PHP 8.4, PHP 8.5, and PHP 8.6
##### Fixed
- [#​6426](https://github.com/sebastianbergmann/phpunit/pull/6426): Fix migration of configuration without schema location
***
Learn how to install or update PHPUnit 12.4 in the [documentation](https://docs.phpunit.de/en/12.4/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v12.4.4`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.4.4): PHPUnit 12.4.4
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.4.3...12.4.4)
##### Fixed
- [#​6408](https://github.com/sebastianbergmann/phpunit/issues/6408): Exception in a data provider method leads to internal PHPUnit error
- [#​6410](https://github.com/sebastianbergmann/phpunit/issues/6410): Test runner's shutdown handler is called in system-under-test's child process
***
Learn how to install or update PHPUnit 12.4 in the [documentation](https://docs.phpunit.de/en/12.4/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v12.4.3`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.4.3): PHPUnit 12.4.3
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.4.2...12.4.3)
##### Fixed
- [#​6402](https://github.com/sebastianbergmann/phpunit/pull/6402): Avoid reading from `STDOUT` when `rewind()` fails
***
Learn how to install or update PHPUnit 12.4 in the [documentation](https://docs.phpunit.de/en/12.4/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v12.4.2`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.4.2): PHPUnit 12.4.2
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.4.1...12.4.2)
##### Changed
- Skipped tests alone no longer lead to a yellow background for the test result summary
##### Fixed
- [#​6391](https://github.com/sebastianbergmann/phpunit/issues/6391): Errors during backup of global variables and static properties are not reported
***
Learn how to install or update PHPUnit 12.4 in the [documentation](https://docs.phpunit.de/en/12.4/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v12.4.1`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.4.1): PHPUnit 12.4.1
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.4.0...12.4.1)
##### Fixed
- [#​6364](https://github.com/sebastianbergmann/phpunit/issues/6364): `--filter` format used by PhpStorm stopped working
- [#​6378](https://github.com/sebastianbergmann/phpunit/issues/6378): Wrong method name passed to `DataProviderMethodCalled` event value object
***
Learn how to install or update PHPUnit 12.4 in the [documentation](https://docs.phpunit.de/en/12.4/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v12.4.0`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.4.0): PHPUnit 12.4.0
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.3.15...12.4.0)
##### Added
- [#​6277](https://github.com/sebastianbergmann/phpunit/issues/6277): Allow tests to opt out of the validation that a data provider method does not provide data sets with more values than a test method accepts
- [#​6341](https://github.com/sebastianbergmann/phpunit/pull/6341): Support for regular expressions with `#[IgnoreDeprecations]` attribute
- [#​6354](https://github.com/sebastianbergmann/phpunit/issues/6354): Invokable constraints
##### Deprecated
- [#​6284](https://github.com/sebastianbergmann/phpunit/issues/6284): `#[RunClassInSeparateProcess]` attribute
- [#​6355](https://github.com/sebastianbergmann/phpunit/issues/6355): Support for version constraint string argument without explicit version comparison operator
***
Learn how to install or update PHPUnit 12.4 in the [documentation](https://docs.phpunit.de/en/12.4/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://t8cbf4509.emailsys1a.net/275/973/33ad04f4be/subscribe/form.html?_g=1752156344) newsletter to receive updates about and tips for PHPUnit.
### [`v12.3.15`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.3.15): PHPUnit 12.3.15
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.3.14...12.3.15)
##### Fixed
- [#​6368](https://github.com/sebastianbergmann/phpunit/issues/6368): `failOnPhpunitWarning="false"` has no effect
***
Learn how to install or update PHPUnit 12.3 in the [documentation](https://docs.phpunit.de/en/12.3/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://t8cbf4509.emailsys1a.net/275/973/33ad04f4be/subscribe/form.html?_g=1752156344) newsletter to receive updates about and tips for PHPUnit.
### [`v12.3.14`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.3.14): PHPUnit 12.3.14
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.3.13...12.3.14)
- No changes; `phpunit.phar` rebuilt with updated dependencies
***
Learn how to install or update PHPUnit 12.3 in the [documentation](https://docs.phpunit.de/en/12.3/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://t8cbf4509.emailsys1a.net/275/973/33ad04f4be/subscribe/form.html?_g=1752156344) newsletter to receive updates about and tips for PHPUnit.
### [`v12.3.13`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.3.13): PHPUnit 12.3.13
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.3.12...12.3.13)
- No changes; `phpunit.phar` rebuilt with updated dependencies
***
Learn how to install or update PHPUnit 12.3 in the [documentation](https://docs.phpunit.de/en/12.3/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://t8cbf4509.emailsys1a.net/275/973/33ad04f4be/subscribe/form.html?_g=1752156344) newsletter to receive updates about and tips for PHPUnit.
### [`v12.3.12`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.3.12): PHPUnit 12.3.12
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.3.11...12.3.12)
- No changes; `phpunit.phar` rebuilt with updated dependencies
***
Learn how to install or update PHPUnit 12.3 in the [documentation](https://docs.phpunit.de/en/12.3/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://t8cbf4509.emailsys1a.net/275/973/33ad04f4be/subscribe/form.html?_g=1752156344) newsletter to receive updates about and tips for PHPUnit.
### [`v12.3.11`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.3.11): PHPUnit 12.3.11
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.3.10...12.3.11)
##### Changed
- [#​6366](https://github.com/sebastianbergmann/phpunit/issues/6366): Exclude `__sleep()` and `__wakeup()` from test double code generation on PHP >= 8.5
***
Learn how to install or update PHPUnit 12.3 in the [documentation](https://docs.phpunit.de/en/12.3/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://t8cbf4509.emailsys1a.net/275/973/33ad04f4be/subscribe/form.html?_g=1752156344) newsletter to receive updates about and tips for PHPUnit.
### [`v12.3.10`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.3.10): PHPUnit 12.3.10
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.3.9...12.3.10)
##### Changed
- [#​6353](https://github.com/sebastianbergmann/phpunit/pull/6353): Disable performance optimization for tests requiring Xdebug
- [#​6357](https://github.com/sebastianbergmann/phpunit/pull/6357): Also collect `E_DEPRECATED` issues when building the test suite
***
Learn how to install or update PHPUnit 12.3 in the [documentation](https://docs.phpunit.de/en/12.3/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://t8cbf4509.emailsys1a.net/275/973/33ad04f4be/subscribe/form.html?_g=1752156344) newsletter to receive updates about and tips for PHPUnit.
### [`v12.3.9`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.3.9): PHPUnit 12.3.9
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.3.8...12.3.9)
##### Changed
- Do not use `__sleep()` method (which will be deprecated in PHP 8.5)
***
Learn how to install or update PHPUnit 12.3 in the [documentation](https://docs.phpunit.de/en/12.3/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://t8cbf4509.emailsys1a.net/275/973/33ad04f4be/subscribe/form.html?_g=1752156344) newsletter to receive updates about and tips for PHPUnit.
### [`v12.3.8`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.3.8): PHPUnit 12.3.8
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.3.7...12.3.8)
##### Fixed
- [#​6340](https://github.com/sebastianbergmann/phpunit/issues/6340): Implicitly enabled display of deprecation details is not disabled when it should be
***
Learn how to install or update PHPUnit 12.3 in the [documentation](https://docs.phpunit.de/en/12.3/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://t8cbf4509.emailsys1a.net/275/973/33ad04f4be/subscribe/form.html?_g=1752156344) newsletter to receive updates about and tips for PHPUnit.
### [`v12.3.7`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.3.7): PHPUnit 12.3.7
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.3.6...12.3.7)
##### Changed
- `#[IgnorePhpunitDeprecations]` is now considered for test runner deprecations (where applicable)
***
Learn how to install or update PHPUnit 12.3 in the [documentation](https://docs.phpunit.de/en/12.3/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://t8cbf4509.emailsys1a.net/275/973/33ad04f4be/subscribe/form.html?_g=1752156344) newsletter to receive updates about and tips for PHPUnit.
### [`v12.3.6`](https://github.com/sebastianbergmann/phpunit/compare/12.3.5...12.3.6)
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.3.5...12.3.6)
### [`v12.3.5`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.3.5): PHPUnit 12.3.5
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.3.4...12.3.5)
##### Changed
- [#​6319](https://github.com/sebastianbergmann/phpunit/issues/6319): Detect premature end of PHPUnit's main PHP process
- [#​6321](https://github.com/sebastianbergmann/phpunit/issues/6321): Allow `error_reporting=E_ALL` for `--check-php-configuration`
##### Fixed
- [#​5863](https://github.com/sebastianbergmann/phpunit/issues/5863): TestDox printer does not show previous exception
- [#​6102](https://github.com/sebastianbergmann/phpunit/issues/6102): `expectUserDeprecationMessage*()` fails when test is run in separate process
***
Learn how to install or update PHPUnit 12.3 in the [documentation](https://docs.phpunit.de/en/12.3/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://t8cbf4509.emailsys1a.net/275/973/33ad04f4be/subscribe/form.html?_g=1752156344) newsletter to receive updates about and tips for PHPUnit.
### [`v12.3.4`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.3.4): PHPUnit 12.3.4
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.3.3...12.3.4)
##### Changed
- [#​6308](https://github.com/sebastianbergmann/phpunit/pull/6308): Improve output of `--check-php-configuration`
- The version number for the test result cache file has been incremented to reflect that its structure for PHPUnit 12.3 is not compatible with its structure for PHPUnit 8.5 and PHPUnit 9.6
##### Fixed
- [#​6197](https://github.com/sebastianbergmann/phpunit/issues/6197): `ini_set('error_log')` sets filepath outside `open_basedir`
- [#​6279](https://github.com/sebastianbergmann/phpunit/issues/6279): Deprecation triggered in data provider method affects all test methods using that data provider method
- [#​6281](https://github.com/sebastianbergmann/phpunit/issues/6281): Exceptions raised in after-test method are not reported for skipped tests
***
Learn how to install or update PHPUnit 12.3 in the [documentation](https://docs.phpunit.de/en/12.3/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://t8cbf4509.emailsys1a.net/275/973/33ad04f4be/subscribe/form.html?_g=1752156344) newsletter to receive updates about and tips for PHPUnit.
### [`v12.3.3`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.3.3): PHPUnit 12.3.3
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.3.2...12.3.3)
##### Fixed
- [#​6304](https://github.com/sebastianbergmann/phpunit/issues/6304): PHPUnit 11.5.29 hangs when a test runner deprecation is triggered and process isolation is used (this reverts "`#[IgnorePhpunitDeprecations]` is now considered for test runner deprecations" from PHPUnit 12.3.1)
***
Learn how to install or update PHPUnit 12.3 in the [documentation](https://docs.phpunit.de/en/12.3/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://t8cbf4509.emailsys1a.net/275/973/33ad04f4be/subscribe/form.html?_g=1752156344) newsletter to receive updates about and tips for PHPUnit.
### [`v12.3.2`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.3.2): PHPUnit 12.3.2
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.3.1...12.3.2)
##### Changed
- [#​6300](https://github.com/sebastianbergmann/phpunit/issues/6300): Emit warning when the name of a data provider method begins with `test`
- Do not use `SplObjectStorage` methods that will be deprecated in PHP 8.5
***
Learn how to install or update PHPUnit 12.3 in the [documentation](https://docs.phpunit.de/en/12.3/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://t8cbf4509.emailsys1a.net/275/973/33ad04f4be/subscribe/form.html?_g=1752156344) newsletter to receive updates about and tips for PHPUnit.
### [`v12.3.1`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.3.1): PHPUnit 12.3.1
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.3.0...12.3.1)
##### Added
- [#​6297](https://github.com/sebastianbergmann/phpunit/issues/6297): `--check-php-configuration` CLI option for checking whether PHP is configured for testing
##### Changed
- `#[IgnorePhpunitDeprecations]` is now considered for test runner deprecations (where applicable)
##### Fixed
- [#​6160](https://github.com/sebastianbergmann/phpunit/issues/6160): Baseline file in a subdirectory contains absolute paths
- [#​6294](https://github.com/sebastianbergmann/phpunit/issues/6294): Silent failure of PHP fatal errors
- Errors due to invalid data provided using `#[TestWith]` or `#[TestWithJson]` attributes are now properly reported
- The `DataProviderMethodFinished` event is now also emitted when the provided data set has an invalid key
***
Learn how to install or update PHPUnit 12.3 in the [documentation](https://docs.phpunit.de/en/12.3/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://t8cbf4509.emailsys1a.net/275/973/33ad04f4be/subscribe/form.html?_g=1752156344) newsletter to receive updates about and tips for PHPUnit.
### [`v12.3.0`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.3.0): PHPUnit 12.3.0
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.2.9...12.3.0)
##### Added
- [#​3795](https://github.com/sebastianbergmann/phpunit/issues/3795): Bootstrap scripts specific to test suites
- [#​6268](https://github.com/sebastianbergmann/phpunit/pull/6268): `#[IgnorePHPUnitWarnings]` attribute for ignoring PHPUnit warnings
- `#[TestDoxFormatter]` and `#[TestDoxFormatterExternal]` attributes for configuring a custom TestDox formatter for tests that use data from data providers
- `TestRunner\ChildProcessErrored` event
- `Configuration::includeTestSuites()` and `Configuration::excludeTestSuites()`
##### Changed
- [#​6237](https://github.com/sebastianbergmann/phpunit/issues/6237): Do not run tests when code coverage analysis is requested but code coverage data cannot be collected
- [#​6272](https://github.com/sebastianbergmann/phpunit/issues/6272): Use `@<data-set-name>` format (compatible with `--filter` CLI option) in defect messages
- [#​6273](https://github.com/sebastianbergmann/phpunit/pull/6273): Warn when `#[DataProvider*]` attributes are mixed with `#[TestWith*]` attributes
##### Deprecated
- [#​6229](https://github.com/sebastianbergmann/phpunit/issues/6229): `Configuration::includeTestSuite()`, use `Configuration::includeTestSuites()` instead
- [#​6229](https://github.com/sebastianbergmann/phpunit/issues/6229): `Configuration::excludeTestSuite()`, use `Configuration::excludeTestSuites()` instead
- [#​6246](https://github.com/sebastianbergmann/phpunit/issues/6246): Using `#[CoversNothing]` on a test method
***
[How to install or update PHPUnit](https://docs.phpunit.de/en/12.3/installation.html)
### [`v12.2.9`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.2.9): PHPUnit 12.2.9
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.2.8...12.2.9)
##### Fixed
- [#​6097](https://github.com/sebastianbergmann/phpunit/issues/6097): The `file` attribute of `<testClass>` node of XML test list can be wrong
***
[How to install or update PHPUnit](https://docs.phpunit.de/en/12.2/installation.html)
### [`v12.2.8`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.2.8): PHPUnit 12.2.8
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.2.7...12.2.8)
##### Fixed
- [#​6274](https://github.com/sebastianbergmann/phpunit/issues/6274): Infinite recursion when code coverage report in OpenClover XML format is configured in XML configuration file
***
[How to install or update PHPUnit](https://docs.phpunit.de/en/12.2/installation.html)
### [`v12.2.7`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.2.7): PHPUnit 12.2.7
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.2.6...12.2.7)
##### Fixed
- [#​6254](https://github.com/sebastianbergmann/phpunit/issues/6254): `defects,random`configuration is supported by implementation, but it is not allowed by the XML configuration file schema
- [#​6259](https://github.com/sebastianbergmann/phpunit/issues/6259): Order of tests which use data from data providers is not affected by test sorting
- [#​6266](https://github.com/sebastianbergmann/phpunit/issues/6266): Superfluous whitespace in TestDox output when test method name has a number after the `test` prefix
***
[How to install or update PHPUnit](https://docs.phpunit.de/en/12.2/installation.html)
### [`v12.2.6`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.2.6): PHPUnit 12.2.6
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.2.5...12.2.6)
##### Fixed
- [#​6104](https://github.com/sebastianbergmann/phpunit/issues/6104): Test with dependencies and data provider fails
- [#​6163](https://github.com/sebastianbergmann/phpunit/issues/6163): `@no-named-arguments` leads to static analysis errors for variadic arguments
***
[How to install or update PHPUnit](https://docs.phpunit.de/en/12.2/installation.html)
### [`v12.2.5`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.2.5): PHPUnit 12.2.5
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.2.4...12.2.5)
##### Fixed
- [#​6249](https://github.com/sebastianbergmann/phpunit/issues/6249): No meaningful error when `<testsuite>` element is missing required `name` attribute
***
[How to install or update PHPUnit](https://docs.phpunit.de/en/12.2/installation.html)
### [`v12.2.4`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.2.4): PHPUnit 12.2.4
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.2.3...12.2.4)
##### Changed
- Including information about the Git repository (such as the commit hash and branch name) in the Open Test Reporting XML format is now an opt-in feature that can be enabled via the `--include-git-information` CLI option or the `includeGitInformation` attribute in the XML configuration file
***
[How to install or update PHPUnit](https://docs.phpunit.de/en/12.2/installation.html)
### [`v12.2.3`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.2.3): PHPUnit 12.2.3
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.2.2...12.2.3)
##### Added
- [#​6236](https://github.com/sebastianbergmann/phpunit/issues/6236): `failOnPhpunitWarning` attribute on the `<phpunit>` element of the XML configuration file and `--fail-on-phpunit-warning` CLI option for controlling whether PHPUnit should fail on PHPUnit warnings (default: `true`)
- [#​6239](https://github.com/sebastianbergmann/phpunit/issues/6239): `--do-not-fail-on-deprecation`, `--do-not-fail-on-phpunit-warning`, `--do-not-fail-on-phpunit-deprecation`, `--do-not-fail-on-empty-test-suite`, `--do-not-fail-on-incomplete`, `--do-not-fail-on-notice`, `--do-not-fail-on-risky`, `--do-not-fail-on-skipped`, and `--do-not-fail-on-warning` CLI options
- `--do-not-report-useless-tests` CLI option as a replacement for `--dont-report-useless-tests`
##### Deprecated
- `--dont-report-useless-tests` CLI option (use `--do-not-report-useless-tests` instead)
##### Fixed
- [#​6243](https://github.com/sebastianbergmann/phpunit/issues/6243): Constraints cannot be implemented without using internal class `ExpectationFailedException`
***
[How to install or update PHPUnit](https://docs.phpunit.de/en/12.2/installation.html)
### [`v12.2.2`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.2.2): PHPUnit 12.2.2
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.2.1...12.2.2)
##### Fixed
- [#​6222](https://github.com/sebastianbergmann/phpunit/issues/6222): Data Provider seems to mess up Test Dependencies
- `shortenArraysForExportThreshold` XML configuration setting has no effect on all arrays exported for event-related value objects
***
[How to install or update PHPUnit](https://docs.phpunit.de/en/12.2/installation.html)
### [`v12.2.1`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.2.1): PHPUnit 12.2.1
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.2.0...12.2.1)
##### Fixed
- [#​6228](https://github.com/sebastianbergmann/phpunit/pull/6228): Variadic test methods should not warn about too many arguments from data provider
***
[How to install or update PHPUnit](https://docs.phpunit.de/en/12.2/installation.html)
### [`v12.2.0`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.2.0): PHPUnit 12.2.0
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.1.6...12.2.0)
##### Added
##### Experimental Support for Open Test Reporting XML
PHPUnit has supported reporting test results in the JUnit XML format for a long time. Unfortunately, there has never been a standard schema for the JUnit XML format. Common consumers of Clover XML log files interpret these files differently, which has led to frequent problems.
To address this, the JUnit team started the [Open Test Reporting project](https://github.com/ota4j-team/open-test-reporting), creating and maintaining language-agnostic XML and HTML test reporting formats. Unlike JUnit XML, Open Test Reporting's XML formats are extensible.
Logging in the Open Test Reporting XML format is controlled by the new `--log-otr` CLI option and the new `<otr>` XML configuration element.
This feature is experimental and the generated XML may change in order to enhance compliance with the Open Test Reporting project's XML schema definitions. The same applies to the XML schema definitions for information that is specific for PHP and PHPUnit. Please note that such changes may occur in bugfix or minor releases and could potentially break backwards compatibility.
##### Experimental Support for OpenClover XML
PHPUnit has supported reporting code coverage information in the Clover XML format for a long time. Unfortunately, there has never been a standard schema for the Clover XML format. Common consumers of Clover XML log files interpret these files differently, which leads to frequent problems.
The original commercial Clover project has been superseded by the Open Source OpenClover project, which provides an XML schema for its OpenClover XML format. Rather than modifying the existing Clover XML reporter to comply with the OpenClover XML schema, thereby breaking backward compatibility, a new OpenClover XML reporter has been introduced.
This new reporter is controlled by the new CLI option, `--coverage-openclover`, and the new XML configuration element, `<openclover>`. This code coverage reporter generates XML documents that validate against the OpenClover project's XML schema definition, with one exception: the `<testproject>` element is not generated.
The existing Clover XML reporter, controlled by the `--coverage-clover` CLI option and the `<clover>` XML configuration element, remains unchanged.
This feature is experimental and the generated XML may change to enhance compliance with the OpenClover XML schema definition. Please note that such changes may occur in bugfix or minor releases and could potentially break backwards compatibility.
##### Miscellaneous
- `--with-telemetry` CLI option that can be used together with `--debug` to print debugging information that includes telemetry information
- The `TestCase::provideAdditionalInformation()` method can now be used to emit a `Test\AdditionalInformationProvided` event
- The new `Test\AfterLastTestMethodFailed`, `Test\AfterTestMethodFailed`, `Test\BeforeFirstTestMethodFailed`, `Test\BeforeTestMethodFailed`, `Test\PostConditionFailed`, `Test\PreConditionFailed` events are now emitted instead of `Test\AfterLastTestMethodErrored`, `Test\AfterTestMethodErrored`, `Test\BeforeFirstTestMethodErrored`, `Test\BeforeTestMethodErrored`, `Test\PostConditionErrored`, `Test\PreConditionErrored` when the `Throwable` extends `AssertionFailedError` to distinguish between errors and failures triggered in hook methods
- The new `Test\PreparationErrored` event is now emitted instead of `Test\PreparationFailed` when the `Throwable` does not extend `AssertionFailedError` to distinguish between errors and failures triggered during test preparation
- `Test\PreparationFailed::throwable()`
##### Changed
- [#​6165](https://github.com/sebastianbergmann/phpunit/pull/6165): Collect deprecations triggered by autoloading while loading/building the test suite
- Do not treat warnings differently than other issues in summary section of default output
- A warning is now emitted when both `#[CoversNothing]` and `#[Covers*]` (or `#[Uses*]`) are used on a test class
- A warning is now emitted when the same `#[Covers*]` (or `#[Uses*]`) attribute is used multiple times on a test class
- A warning is now emitted when the same code is targeted by both `#[Covers*]` and `#[Uses*]` attributes
- A warning is now emitted when a hook method such as `setUp()`, for example has a `#[Test]` attribute
- A warning is now emitted when more than one of `#[Small]`, `#[Medium]`, or `#[Large]` is used on a test class
- A warning is now emitted when a data provider provides data sets that have more values than the test method consumes using arguments
***
[How to install or update PHPUnit](https://docs.phpunit.de/en/12.2/installation.html)
### [`v12.1.6`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.1.6): PHPUnit 12.1.6
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.1.5...12.1.6)
##### Changed
- [#​6210](https://github.com/sebastianbergmann/phpunit/pull/6210): Set default Clover coverage project name
- [#​6217](https://github.com/sebastianbergmann/phpunit/pull/6217): Improve the error message when `createStubForIntersectionOfInterfaces()` is called with a class
***
[How to install or update PHPUnit](https://docs.phpunit.de/en/12.1/installation.html)
### [`v12.1.5`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.1.5): PHPUnit 12.1.5
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.1.4...12.1.5)
##### Fixed
- [#​6192](https://github.com/sebastianbergmann/phpunit/issues/6192): Reverted change made in PHPUnit 11.5.19 due to regression
- [#​6199](https://github.com/sebastianbergmann/phpunit/issues/6199): `assertEmpty()` and `assertNotEmpty()` use overly restrictive `phpstan-assert empty` directives
***
[How to install or update PHPUnit](https://docs.phpunit.de/en/12.1/installation.html)
### [`v12.1.4`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.1.4): PHPUnit 12.1.4
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.1.3...12.1.4)
##### Added
- `displayDetailsOnAllIssues` attribute on the `<phpunit>` element of the XML configuration file and `--display-all-issues` CLI option for controlling whether PHPUnit should display details on all issues that are triggered (default: `false`)
- `failOnAllIssues` attribute on the `<phpunit>` element of the XML configuration file and `--fail-on-all-issues` CLI option for controlling whether PHPUnit should fail on all issues that are triggered (default: `false`)
##### Changed
- [#​5956](https://github.com/sebastianbergmann/phpunit/issues/5956): Improved handling of deprecated `E_STRICT` constant
##### Fixed
- [#​6192](https://github.com/sebastianbergmann/phpunit/issues/6192): Positive `%a` and `%A` matches are not ignored from diff when `EXPECTF` fails
***
[How to install or update PHPUnit](https://docs.phpunit.de/en/12.1/installation.html)
### [`v12.1.3`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.1.3): PHPUnit 12.1.3
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.1.2...12.1.3)
##### Changed
- When gathering the telemetry information that each event has, the real size of memory allocated from the operating system is no longer used as this is grown by PHP's memory manager in chunks that are so large that small(er) increases in peak memory usage cannot be seen
- The peak memory usage returned by `memory_get_peak_usage()` is now reset immediately before the `Test\Prepared` event is emitted using `memory_reset_peak_usage()` so that (memory usage at `Test\Finished` - memory usage at `Test\Prepared`) is a better approximation of the memory usage of the test
- The string representation of `Telemetry\Info` now uses peak memory usage instead of memory usage (this affects `--log-events-verbose-text`)
##### Fixed
- [#​6173](https://github.com/sebastianbergmann/phpunit/issues/6173): Output from `error_log()` is not displayed when test fails
- A "Before Test Method Errored" event is no longer emitted when a test is skipped in a "before test" method
***
[How to install or update PHPUnit](https://docs.phpunit.de/en/12.1/installation.html)
### [`v12.1.2`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.1.2): PHPUnit 12.1.2
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.1.1...12.1.2)
##### Fixed
- [#​6104](https://github.com/sebastianbergmann/phpunit/issues/6104): Reverted change introduced in PHPUnit 12.1.1
***
[How to install or update PHPUnit](https://docs.phpunit.de/en/12.1/installation.html)
### [`v12.1.1`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.1.1): PHPUnit 12.1.1
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.1.0...12.1.1)
##### Fixed
- [#​6104](https://github.com/sebastianbergmann/phpunit/issues/6104): Test with dependencies and data provider fails
- [#​6174](https://github.com/sebastianbergmann/phpunit/issues/6174): `willReturnMap()` fails with nullable parameters when their default is `null` and no argument is passed for them
***
[How to install or update PHPUnit](https://docs.phpunit.de/en/12.1/installation.html)
### [`v12.1.0`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.1.0): PHPUnit 12.1.0
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.0.10...12.1.0)
##### Added
- [#​6118](https://github.com/sebastianbergmann/phpunit/pull/6118): `expectErrorLog()` for expecting `error_log()` output
- [#​6126](https://github.com/sebastianbergmann/phpunit/pull/6126): Attribute `#[WithEnvironmentVariable]` for setting an environment variable for the duration of a test
- The `AfterTestMethodCalled`, `AfterTestMethodErrored`, `AfterTestMethodFinished`, `BeforeTestMethodCalled`, `BeforeTestMethodErrored`, `BeforeTestMethodFinished`, `PostConditionCalled`, `PostConditionErrored`, `PostConditionFinished`, `PreConditionCalled`, `PreConditionErrored`, and `PreConditionFinished` event value objects now have `test()` method that returns a value object representing the test method for which the hook method was called
##### Changed
- When code coverage processing is requested and no static analysis cache directory has been configured then a cache directory in the operating system's path used for temporary files is automatically created and used
- The static analysis of first-party source files required for the code coverage functionality is now performed before the first test is run, if code coverage processing is requested (via the XML configuration file and/or CLI options), all first-party source files are configured to be processed (which is the default), and a static analysis cache directory is available (either explicitly configured or automatically determined, see above). This has the same effect as running `phpunit --warm-coverage-cache` before running tests.
##### Deprecated
- [#​6140](https://github.com/sebastianbergmann/phpunit/issues/6140): The `testClassName()` method on the `AfterTestMethodCalled`, `AfterTestMethodErrored`, `AfterTestMethodFinished`, `BeforeTestMethodCalled`, `BeforeTestMethodErrored`, `BeforeTestMethodFinished`, `PostConditionCalled`, `PostConditionErrored`, `PostConditionFinished`, `PreConditionCalled`, `PreConditionErrored`, and `PreConditionFinished` event value objects (use `test()->className()` instead)
***
[How to install or update PHPUnit](https://docs.phpunit.de/en/12.1/installation.html)
### [`v12.0.10`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.0.10): PHPUnit 12.0.10
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.0.9...12.0.10)
##### Changed
- [#​6150](https://github.com/sebastianbergmann/phpunit/issues/6150): Reverted change introduced in PHPUnit 12.0.8
***
[How to install or update PHPUnit](https://docs.phpunit.de/en/12.0/installation.html)
### [`v12.0.9`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.0.9): PHPUnit 12.0.9
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.0.8...12.0.9)
##### Fixed
- [#​6154](https://github.com/sebastianbergmann/phpunit/issues/6154): Method `with()` on test doubles yields error with static analyzer
***
[How to install or update PHPUnit](https://docs.phpunit.de/en/12.0/installation.html)
### [`v12.0.8`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.0.8): PHPUnit 12.0.8
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.0.7...12.0.8)
##### Changed
- [#​6150](https://github.com/sebastianbergmann/phpunit/issues/6150): Trigger warning when code coverage analysis is performed and no cache directory is configured
***
[How to install or update PHPUnit](https://docs.phpunit.de/en/12.0/installation.html)
### [`v12.0.7`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.0.7): PHPUnit 12.0.7
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.0.6...12.0.7)
##### Fixed
- [#​5976](https://github.com/sebastianbergmann/phpunit/issues/5976): TestDox result printer does not display details about errors triggered in before-first-test and after-last-test methods
***
[How to install or update PHPUnit](https://docs.phpunit.de/en/12.0/installation.html)
### [`v12.0.6`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.0.6): PHPUnit 12.0.6
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.0.5...12.0.6)
##### Fixed
- [#​6142](https://github.com/sebastianbergmann/phpunit/issues/6142): `$expected` and `$actual` are mixed up in failure description when `assertJsonFileEqualsJsonFile()` fails
***
[How to install or update PHPUnit](https://docs.phpunit.de/en/12.0/installation.html)
### [`v12.0.5`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.0.5): PHPUnit 12.0.5
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.0.4...12.0.5)
##### Fixed
- [#​6138](https://github.com/sebastianbergmann/phpunit/issues/6138): Test with failed expectation on value passed to mocked method is incorrectly considered risky
***
[How to install or update PHPUnit](https://docs.phpunit.de/en/12.0/installation.html)
### [`v12.0.4`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.0.4): PHPUnit 12.0.4
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.0.3...12.0.4)
##### Fixed
- [#​6134](https://github.com/sebastianbergmann/phpunit/issues/6134): Missing event when child process ends unexpectedly
***
[How to install or update PHPUnit](https://docs.phpunit.de/en/12.0/installation.html)
### [`v12.0.3`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.0.3): PHPUnit 12.0.3
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.0.2...12.0.3)
##### Changed
- `TestCase::__construct()` is now declared `final` (it was annotated with `@final` before and the announced changed from `@final` to `final` for PHPUnit 12 was forgotten)
##### Fixed
- [#​5951](https://github.com/sebastianbergmann/phpunit/issues/5951#issuecomment-2656364815): Restore the `includeUncoveredFiles` configuration option
- [#​6133](https://github.com/sebastianbergmann/phpunit/issues/6133): Precision loss in aggregated test suite execution time(s) reported by JUnit XML logger
- A `Test\PreparationFailed` event is now emitted in addition to a `Test\Errored` event when an unexpected exception is triggered in a before-test method
- A `Test\Passed` event is no longer emitted in addition to a `Test\Failed` or `Test\Errored` event when an assertion failure or an unexpected exception is triggered in an after-test method
- A `TestSuite\Finished` event is now emitted when a before-first-test method errors
***
[How to install or update PHPUnit](https://docs.phpunit.de/en/12.0/installation.html)
### [`v12.0.2`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.0.2): PHPUnit 12.0.2
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.0.1...12.0.2)
##### Changed
- Updated dependencies for PHAR distribution
***
[How to install or update PHPUnit](https://docs.phpunit.de/en/12.0/installation.html)
### [`v12.0.1`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.0.1): PHPUnit 12.0.1
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/12.0.0...12.0.1)
##### Fixed
- Deprecation message for `Assert::isType()`, `assertContainsOnly()`, `assertNotContainsOnly()`, and `containsOnly()`
***
[How to install or update PHPUnit](https://docs.phpunit.de/en/12.0/installation.html)
### [`v12.0.0`](https://github.com/sebastianbergmann/phpunit/releases/tag/12.0.0): PHPUnit 12.0.0
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/11.5.55...12.0.0)
##### Added
- [#​5984](https://github.com/sebastianbergmann/phpunit/issues/5984): `#[CoversClassesThatExtendClass]` and `#[UsesClassesThatExtendClass]`
- [#​5985](https://github.com/sebastianbergmann/phpunit/issues/5985): `#[CoversClassesThatImplementInterface]` and `#[UsesClassesThatImplementInterface]`
- [#​6073](https://github.com/sebastianbergmann/phpunit/issues/6073): `#[CoversNamespace]` and `#[UsesNamespace]`
- [#​6074](https://github.com/sebastianbergmann/phpunit/pull/6074): `#[RequiresEnvironmentVariable]`
##### Changed
- [#​5872](https://github.com/sebastianbergmann/phpunit/issues/5872): The default value for `shortenArraysForExportThreshold` is now `10` (limit export of arrays to 10 levels) instead of `0` (do not limit export of arrays)
##### Deprecated
- [#​6053](https://github.com/sebastianbergmann/phpunit/issues/6053): `Assert::isType()` (was soft-deprecated in PHPUnit 11.5)
- [#​6056](https://github.com/sebastianbergmann/phpunit/issues/6056): `assertContainsOnly()` (was soft-deprecated in PHPUnit 11.5)
- [#​6056](https://github.com/sebastianbergmann/phpunit/issues/6056): `assertNotContainsOnly()` (was soft-deprecated in PHPUnit 11.5)
- [#​6060](https://github.com/sebastianbergmann/phpunit/issues/6060): `containsOnly()` (was soft-deprecated in PHPUnit 11.5)
##### Removed
- [#​5215](https://github.com/sebastianbergmann/phpunit/issues/5215): `TestCase::iniSet()`
- [#​5217](https://github.com/sebastianbergmann/phpunit/issues/5217): `TestCase::setLocale()`
- [#​5246](https://github.com/sebastianbergmann/phpunit/issues/5246): `TestCase::createTestProxy()`
- [#​5247](https://github.com/sebastianbergmann/phpunit/issues/5247): `TestCase::getMockForAbstractClass()`
- [#​5248](https://github.com/sebastianbergmann/phpunit/issues/5248): `TestCase::getMockFromWsdl()`
- [#​5249](https://github.com/sebastianbergmann/phpunit/issues/5249): `TestCase::getMockForTrait()`
- [#​5250](https://github.com/sebastianbergmann/phpunit/issues/5250): `TestCase::getObjectForTrait()`
- [#​5310](https://github.com/sebastianbergmann/phpunit/issues/5310): `MockBuilder::enableAutoload()` and `MockBuilder::disableAutoload()`
- [#​5311](https://github.com/sebastianbergmann/phpunit/issues/5311): `MockBuilder::allowMockingUnknownTypes()` and `MockBuilder::disallowMockingUnknownTypes()`
- [#​5312](https://github.com/sebastianbergmann/phpunit/issues/5312): `MockBuilder::enableProxyingToOriginalMethods()`, `MockBuilder::disableProxyingToOriginalMethods()`, and `MockBuilder::setProxyTarget()`
- [#​5313](https://github.com/sebastianbergmann/phpunit/issues/5313): `MockBuilder::getMockForTrait()`
- [#​5314](https://github.com/sebastianbergmann/phpunit/issues/5314): `MockBuilder::getMockForAbstractClass()`
- [#​5316](https://github.com/sebastianbergmann/phpunit/issues/5316): `MockBuilder::enableArgumentCloning()` and `MockBuilder::disableArgumentCloning()`
- [#​5321](https://github.com/sebastianbergmann/phpunit/issues/5321): `MockBuilder::addMethods()`
- [#​5416](https://github.com/sebastianbergmann/phpunit/issues/5416): Support for doubling interfaces (or classes) that have a method named `method`
- [#​5424](https://github.com/sebastianbergmann/phpunit/issues/5424): `TestCase` methods for creating return stub configuration objects
- [#​5473](https://github.com/sebastianbergmann/phpunit/issues/5473): `assertStringNotMatchesFormat()` and `assertStringNotMatchesFormatFile()`
- [#​5536](https://github.com/sebastianbergmann/phpunit/issues/5536): Support for configuring expectations using `expects()` on test stubs
- [#​5541](https://github.com/sebastianbergmann/phpunit/issues/5541): Support for metadata in doc-comments
- [#​5710](https://github.com/sebastianbergmann/phpunit/issues/5710): Support for using comma-separated values with the `--group`, `--exclude-group`, `--covers`, `--uses`, and `--test-suffix` CLI options
- [#​5756](https://github.com/sebastianbergmann/phpunit/issues/5756): Support for the `restrictDeprecations` attribute on the `<source>` element of the XML configuration file
- [#​5801](https://github.com/sebastianbergmann/phpunit/issues/5801): Support for targeting traits with `#[CoversClass]` and `#[UsesClass]` attributes
- [#​5978](https://github.com/sebastianbergmann/phpunit/issues/5978): Support for PHP 8.2
***
[How to install or update PHPUnit](https://docs.phpunit.de/en/12.0/installation.html)
### [`v11.5.55`](https://github.com/sebastianbergmann/phpunit/releases/tag/11.5.55): PHPUnit 11.5.55
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/11.5.54...11.5.55)
##### Fixed
- [#​6521](https://github.com/sebastianbergmann/phpunit/issues/6521): Performance regression in PHPUnit 11.5.54, PHPUnit 12.5.13, and PHPUnit 13.0.4
***
Learn how to install or update PHPUnit 11.5 in the [documentation](https://docs.phpunit.de/en/11.5/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
### [`v11.5.54`](https://github.com/sebastianbergmann/phpunit/releases/tag/11.5.54): PHPUnit 11.5.54
[Compare Source](https://github.com/sebastianbergmann/phpunit/compare/11.5.53...11.5.54)
##### Fixed
- [#​6489](https://github.com/sebastianbergmann/phpunit/pull/6489): Classification of self/direct/indirect deprecation triggers is not aligned with Symfony's bridge for PHPUnit
***
Learn how to install or update PHPUnit 11.5 in the [documentation](https://docs.phpunit.de/en/11.5/installation.html).
##### Keep up to date with PHPUnit:
- You can follow [@​phpunit@phpc.social](https://phpc.social/@​phpunit) to stay up to date with PHPUnit's development.
- You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit.
</details>
---
### Configuration
📅 **Schedule**: (UTC)
- Branch creation
- At any time (no schedule defined)
- Automerge
- At any time (no schedule defined)
🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update again.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box
---
This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xNjUuMSIsInVwZGF0ZWRJblZlciI6IjQzLjE2NS4xIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbXX0=-->
Renovate failed to update an artifact related to this branch. You probably do not want to merge this PR as-is.
♻ Renovate will retry this branch, including artifacts, only when one of the following happens:
any of the package files in this branch needs updating, or
the branch becomes conflicted, or
you click the rebase/retry checkbox if found above, or
you rename this PR's title to start with "rebase!" to trigger it manually
The artifact failure details are included below:
File name: composer.lock
Command failed: composer update phpunit/phpunit:13.1.9 --with-dependencies --ignore-platform-req=ext-* --ignore-platform-req=lib-* --no-ansi --no-interaction --no-scripts --no-autoloader --no-plugins --minimal-changes
Loading composer repositories with package information
Updating dependencies
Your requirements could not be resolved to an installable set of packages.
Problem 1
- nunomaduro/collision is locked to version v8.8.3 and an update of this package was not requested.
- Root composer.json requires phpunit/phpunit ^13.0.0 -> satisfiable by phpunit/phpunit[13.1.9].
- nunomaduro/collision v8.8.3 conflicts with phpunit/phpunit 13.1.9.
Use the option --with-all-dependencies (-W) to allow upgrades, downgrades and removals for packages currently locked to specific versions.
### ⚠️ Artifact update problem
Renovate failed to update an artifact related to this branch. You probably do not want to merge this PR as-is.
♻ Renovate will retry this branch, including artifacts, only when one of the following happens:
- any of the package files in this branch needs updating, or
- the branch becomes conflicted, or
- you click the rebase/retry checkbox if found above, or
- you rename this PR's title to start with "rebase!" to trigger it manually
The artifact failure details are included below:
##### File name: composer.lock
```
Command failed: composer update phpunit/phpunit:13.1.9 --with-dependencies --ignore-platform-req=ext-* --ignore-platform-req=lib-* --no-ansi --no-interaction --no-scripts --no-autoloader --no-plugins --minimal-changes
Loading composer repositories with package information
Updating dependencies
Your requirements could not be resolved to an installable set of packages.
Problem 1
- nunomaduro/collision is locked to version v8.8.3 and an update of this package was not requested.
- Root composer.json requires phpunit/phpunit ^13.0.0 -> satisfiable by phpunit/phpunit[13.1.9].
- nunomaduro/collision v8.8.3 conflicts with phpunit/phpunit 13.1.9.
Use the option --with-all-dependencies (-W) to allow upgrades, downgrades and removals for packages currently locked to specific versions.
```
renovate_bot
changed title from [renovate-composer]: upgrade phpunit/phpunit - 11.5.53 → 13.1.9 to [renovate-composer]: upgrade phpunit/phpunit - 11.5.53 → 13.1.9 - autoclosed2026-05-15 10:20:50 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
This PR contains the following updates:
^11.5.3→^13.0.0Release Notes
sebastianbergmann/phpunit (phpunit/phpunit)
v13.1.9: PHPUnit 13.1.9Compare Source
Changed
TestorTestsprefix is no longer stripped from class names when they are processed for TestDox outputFixed
Learn how to install or update PHPUnit 13.1 in the documentation.
Keep up to date with PHPUnit:
v13.1.8: PHPUnit 13.1.8Compare Source
Fixed
testStartedandtestFinishedassertArrays*IgnoringOrder()fails on mixed scalar types and on reordered nested associative arraysMockBuilder::setMockClassName()andTestStubBuilder::setStubClassName()now reject values that are not valid unqualified PHP class identifiers, throwing the newInvalidClassNameExceptionGenerator::ensureValidMethods()to validate method names passed toMockBuilder::onlyMethods()andaddMethods()was not anchored, so any string containing a valid identifier substring (including strings with parentheses, braces, comments, or newlines) was acceptedLearn how to install or update PHPUnit 13.1 in the documentation.
Keep up to date with PHPUnit:
v13.1.7: PHPUnit 13.1.7Compare Source
Changed
LIBXML_NONETwhen parsing/validating XML configuration files to make explicit that no network I/O is performedLearn how to install or update PHPUnit 13.1 in the documentation.
Keep up to date with PHPUnit:
v13.1.6: PHPUnit 13.1.6Compare Source
Fixed
;and"are not preserved when forwarding settings to child processesLearn how to install or update PHPUnit 13.1 in the documentation.
Keep up to date with PHPUnit:
v13.1.5: PHPUnit 13.1.5Compare Source
Fixed
-dsettings are not forwarded to child processes for process isolationRequiresPhp(e.g.<=8.5) is compared against full PHP version, causing unexpected skipsdataSetAsStringWithData()raises "float is not representable as int" warning for large floats in data setsLearn how to install or update PHPUnit 13.1 in the documentation.
Keep up to date with PHPUnit:
v13.1.4: PHPUnit 13.1.4Compare Source
Fixed
DefaultJobRunnerdeadlocks on child processes that write large amounts of stderr output$_SERVERentries leak from parent into child processfailOnEmptyTestSuite="false"inphpunit.xmlis ignored when--group/--filter/--testsuitematches no testsLearn how to install or update PHPUnit 13.1 in the documentation.
Keep up to date with PHPUnit:
v13.1.3: PHPUnit 13.1.3Compare Source
Fixed
Learn how to install or update PHPUnit 13.1 in the documentation.
Keep up to date with PHPUnit:
v13.1.2: PHPUnit 13.1.2Compare Source
Fixed
--random-order-seedis used when test execution order is not random--filterdoes not work when filter string starts with#TestSuiteSkippedevent--filter,--group,--testsuite) yields no teststearDown()and handler restoration, causing subsequent tests to be marked as riskyLearn how to install or update PHPUnit 13.1 in the documentation.
Keep up to date with PHPUnit:
v13.1.1: PHPUnit 13.1.1Compare Source
Changed
exitwas called from some testFixed
colors="true"in XML configuration file does not unconditionally enable colored output--migrate-configurationdoes not update schema location when XML content already validates against current schemawillReturnCallback()is silently swallowed when code under test catches exceptionsset_include_path()TestDoubleBuildermethod chainingLearn how to install or update PHPUnit 13.1 in the documentation.
Keep up to date with PHPUnit:
v13.1.0: PHPUnit 13.1.0Compare Source
Added
includeInCodeCoverageattribute for<directory>and<file>children of<source>#[Group]information in Open Test Reporting (OTR) XML logfile#[DataProviderClosure]for static closures<issueTriggerResolvers>in the XML configuration file%r...%rinEXPECTFsectionoutputDirectoryattribute, allowing the output directory to be specified later with the--coverage-htmlCLI optionChanged
StringMatchesFormatDescriptionconstraint which is used byassertFileMatchesFormat(),assertFileMatchesFormatFile(),assertStringMatchesFormat(),assertStringMatchesFormatFile(), andEXPECTFsections of PHPT test filesPHPUnit\Runner\Extension\Facadefrom a concrete class to an interface and introduced an internalExtensionFacadeimplementation, so that extensions only depend on theFacadeinterface while PHPUnit internally uses theExtensionFacadeclass that also provides query methodsDeprecated
--log-events-verbose-text <file>CLI optionid()andafter()for mock object expectationsFixed
FILE_EXTERNALbreaks__DIR__TestSuiteLoaderis brittle and causes "Class FooTest not found" even for valid tests in valid filenamesLearn how to install or update PHPUnit 13.1 in the documentation.
Keep up to date with PHPUnit:
v13.0.6: PHPUnit 13.0.6Compare Source
Changed
Fixed
RegularExpressionandStringMatchesFormatDescriptiondid not handlepreg_match()errors such asCompilation failed: regular expression is too largeLearn how to install or update PHPUnit 13.0 in the documentation.
Keep up to date with PHPUnit:
v13.0.5: PHPUnit 13.0.5Compare Source
Fixed
Learn how to install or update PHPUnit 13.0 in the documentation.
Keep up to date with PHPUnit:
v13.0.4: PHPUnit 13.0.4Compare Source
Fixed
Learn how to install or update PHPUnit 13.0 in the documentation.
Keep up to date with PHPUnit:
v13.0.3: PHPUnit 13.0.3Compare Source
Fixed
<ini />can silently failLearn how to install or update PHPUnit 13.0 in the documentation.
Keep up to date with PHPUnit:
v13.0.2: PHPUnit 13.0.2Compare Source
Deprecated
atLeast()with an argument that is not positivewith*()withoutexpects()Fixed
SourceMappermay be deleted prematurely when multiple PHPUnit processes run in parallelwith()is used withoutexpects()Learn how to install or update PHPUnit 13.0 in the documentation.
Keep up to date with PHPUnit:
v13.0.1: PHPUnit 13.0.1Compare Source
Fixed
method()returnsInvocationMockerinstead ofInvocationStubberfor test stubsLearn how to install or update PHPUnit 13.0 in the documentation.
Keep up to date with PHPUnit:
v13.0.0: PHPUnit 13.0.0Compare Source
Added
TestCase::invokeTestMethod()method for customizing test method invocationwithParameterSetsInOrder()andwithParameterSetsInAnyOrder()for expecting calls to the same method of a mock object but with different argumentsassertArraysAreIdentical(),assertArraysAreIdenticalIgnoringOrder(),assertArraysHaveIdenticalValues(),assertArraysHaveIdenticalValuesIgnoringOrder(),assertArraysAreEqual(),assertArraysAreEqualIgnoringOrder(),assertArraysHaveEqualValues(), andassertArraysHaveEqualValuesIgnoringOrder()assertions--test-files-file <file>CLI option to configure a file that contains the paths to the test files to be loaded (one file per line); use this when using CLI arguments is not an option due to argument length limitationsDeprecated
any()matcher (hard deprecation)Removed
Assert::isType()assertContainsOnly()andassertNotContainsOnly()containsOnly()testClassName()method on event value objects for hook methods called for test methodsConfiguration::includeTestSuite()andConfiguration::excludeTestSuite()--dont-report-useless-testsCLI option#[CoversNothing]on a test method#[RunClassInSeparateProcess]attributeLearn how to install or update PHPUnit 13.0 in the documentation.
Keep up to date with PHPUnit:
v12.5.25: PHPUnit 12.5.25Compare Source
Changed
TestorTestsprefix is no longer stripped from class names when they are processed for TestDox outputFixed
Learn how to install or update PHPUnit 12.5 in the documentation.
Keep up to date with PHPUnit:
v12.5.24: PHPUnit 12.5.24Compare Source
Added
TestCase::invokeTestMethod()method for customizing test method invocation from PHPUnit 13Fixed
testStartedandtestFinishedMockBuilder::setMockClassName()andTestStubBuilder::setStubClassName()now reject values that are not valid unqualified PHP class identifiers, throwing the newInvalidClassNameExceptionGenerator::ensureValidMethods()to validate method names passed toMockBuilder::onlyMethods()andaddMethods()was not anchored, so any string containing a valid identifier substring (including strings with parentheses, braces, comments, or newlines) was acceptedLearn how to install or update PHPUnit 12.5 in the documentation.
Keep up to date with PHPUnit:
v12.5.23: PHPUnit 12.5.23Compare Source
Changed
LIBXML_NONETwhen parsing/validating XML configuration files to make explicit that no network I/O is performedLearn how to install or update PHPUnit 12.5 in the documentation.
Keep up to date with PHPUnit:
v12.5.22: PHPUnit 12.5.22Compare Source
Fixed
;and"are not preserved when forwarding settings to child processesLearn how to install or update PHPUnit 12.5 in the documentation.
Keep up to date with PHPUnit:
v12.5.21: PHPUnit 12.5.21Compare Source
Fixed
-dsettings are not forwarded to child processes for process isolationRequiresPhp(e.g.<=8.5) is compared against full PHP version, causing unexpected skipsLearn how to install or update PHPUnit 12.5 in the documentation.
Keep up to date with PHPUnit:
v12.5.20: PHPUnit 12.5.20Compare Source
Fixed
DefaultJobRunnerdeadlocks on child processes that write large amounts of stderr output$_SERVERentries leak from parent into child processfailOnEmptyTestSuite="false"inphpunit.xmlis ignored when--group/--filter/--testsuitematches no testsLearn how to install or update PHPUnit 12.5 in the documentation.
Keep up to date with PHPUnit:
v12.5.19: PHPUnit 12.5.19Compare Source
Fixed
Learn how to install or update PHPUnit 12.5 in the documentation.
Keep up to date with PHPUnit:
v12.5.18: PHPUnit 12.5.18Compare Source
Fixed
--random-order-seedis used when test execution order is not random--filterdoes not work when filter string starts with#TestSuiteSkippedevent--filter,--group,--testsuite) yields no teststearDown()and handler restoration, causing subsequent tests to be marked as riskyLearn how to install or update PHPUnit 12.5 in the documentation.
Keep up to date with PHPUnit:
v12.5.17: PHPUnit 12.5.17Compare Source
Changed
exitwas called from some testFixed
colors="true"in XML configuration file does not unconditionally enable colored output--migrate-configurationdoes not update schema location when XML content already validates against current schemawillReturnCallback()is silently swallowed when code under test catches exceptionsset_include_path()TestDoubleBuildermethod chainingLearn how to install or update PHPUnit 12.5 in the documentation.
Keep up to date with PHPUnit:
v12.5.16: PHPUnit 12.5.16Compare Source
Added
%r...%rinEXPECTFsectionFixed
FILE_EXTERNALbreaks__DIR__TestSuiteLoaderis brittle and causes "Class FooTest not found" even for valid tests in valid filenamesLearn how to install or update PHPUnit 12.5 in the documentation.
Keep up to date with PHPUnit:
v12.5.15: PHPUnit 12.5.15Compare Source
Changed
Fixed
RegularExpressionandStringMatchesFormatDescriptiondid not handlepreg_match()errors such asCompilation failed: regular expression is too largeLearn how to install or update PHPUnit 12.5 in the documentation.
Keep up to date with PHPUnit:
v12.5.14: PHPUnit 12.5.14Compare Source
Fixed
Learn how to install or update PHPUnit 12.5 in the documentation.
Keep up to date with PHPUnit:
v12.5.13: PHPUnit 12.5.13Compare Source
Fixed
Learn how to install or update PHPUnit 12.5 in the documentation.
Keep up to date with PHPUnit:
v12.5.12: PHPUnit 12.5.12Compare Source
Fixed
<ini />can silently failLearn how to install or update PHPUnit 12.5 in the documentation.
Keep up to date with PHPUnit:
v12.5.11: PHPUnit 12.5.11Compare Source
Deprecated
with*()on test stubsFixed
SourceMappermay be deleted prematurely when multiple PHPUnit processes run in parallelwith()is used withoutexpects()Learn how to install or update PHPUnit 12.5 in the documentation.
Keep up to date with PHPUnit:
v12.5.10: PHPUnit 12.5.10Compare Source
Fixed
Learn how to install or update PHPUnit 12.5 in the documentation.
Keep up to date with PHPUnit:
v12.5.9: PHPUnit 12.5.9Compare Source
Added
Fixed
Learn how to install or update PHPUnit 12.5 in the documentation.
Keep up to date with PHPUnit:
v12.5.8: PHPUnit 12.5.8Compare Source
Changed
.coveragefiles in pull requests, a PHPT test will no longer be run if the temporary file for writing code coverage information already exists before the test runsLearn how to install or update PHPUnit 12.5 in the documentation.
Keep up to date with PHPUnit:
v12.5.7: PHPUnit 12.5.7Compare Source
Fixed
Count::getCountOf()for unusal implementations ofIteratororIteratorAggregateLearn how to install or update PHPUnit 12.5 in the documentation.
Keep up to date with PHPUnit:
v12.5.6: PHPUnit 12.5.6Compare Source
Changed
Learn how to install or update PHPUnit 12.5 in the documentation.
Keep up to date with PHPUnit:
v12.5.5: PHPUnit 12.5.5Compare Source
Deprecated
any()matcher (soft deprecation)Fixed
Learn how to install or update PHPUnit 12.5 in the documentation.
Keep up to date with PHPUnit:
v12.5.4: PHPUnit 12.5.4Compare Source
Changed
#[AllowMockObjectsWithoutExpectations]attribute can now be used on the method levelFixed
Timer::start() has to be called before Timer::stop()Learn how to install or update PHPUnit 12.5 in the documentation.
Keep up to date with PHPUnit:
v12.5.3: PHPUnit 12.5.3Compare Source
Changed
Learn how to install or update PHPUnit 12.5 in the documentation.
Keep up to date with PHPUnit:
v12.5.2: PHPUnit 12.5.2Compare Source
Added
#[AllowMockObjectsWithoutExpectations]for excluding tests from the check that emits the notice for test methods that create a mock object but do not configure an expectation for itLearn how to install or update PHPUnit 12.5 in the documentation.
Keep up to date with PHPUnit:
v12.5.1: PHPUnit 12.5.1Compare Source
Added
TestCase::getStubBuilder()(analogous toTestCase::getMockBuilder()) for creating (partial) test stubs using a fluent APILearn how to install or update PHPUnit 12.5 in the documentation.
Keep up to date with PHPUnit:
v12.5.0: PHPUnit 12.5.0Compare Source
Added
--allCLI option to ignore test selection configured in XML configuration file<source>element in XML code coverage report optionalChanged
ThrowableinexpectExceptionObject()Learn how to install or update PHPUnit 12.5 in the documentation.
Keep up to date with PHPUnit:
v12.4.5: PHPUnit 12.4.5Compare Source
Changed
Fixed
Learn how to install or update PHPUnit 12.4 in the documentation.
Keep up to date with PHPUnit:
v12.4.4: PHPUnit 12.4.4Compare Source
Fixed
Learn how to install or update PHPUnit 12.4 in the documentation.
Keep up to date with PHPUnit:
v12.4.3: PHPUnit 12.4.3Compare Source
Fixed
STDOUTwhenrewind()failsLearn how to install or update PHPUnit 12.4 in the documentation.
Keep up to date with PHPUnit:
v12.4.2: PHPUnit 12.4.2Compare Source
Changed
Fixed
Learn how to install or update PHPUnit 12.4 in the documentation.
Keep up to date with PHPUnit:
v12.4.1: PHPUnit 12.4.1Compare Source
Fixed
--filterformat used by PhpStorm stopped workingDataProviderMethodCalledevent value objectLearn how to install or update PHPUnit 12.4 in the documentation.
Keep up to date with PHPUnit:
v12.4.0: PHPUnit 12.4.0Compare Source
Added
#[IgnoreDeprecations]attributeDeprecated
#[RunClassInSeparateProcess]attributeLearn how to install or update PHPUnit 12.4 in the documentation.
Keep up to date with PHPUnit:
v12.3.15: PHPUnit 12.3.15Compare Source
Fixed
failOnPhpunitWarning="false"has no effectLearn how to install or update PHPUnit 12.3 in the documentation.
Keep up to date with PHPUnit:
v12.3.14: PHPUnit 12.3.14Compare Source
phpunit.pharrebuilt with updated dependenciesLearn how to install or update PHPUnit 12.3 in the documentation.
Keep up to date with PHPUnit:
v12.3.13: PHPUnit 12.3.13Compare Source
phpunit.pharrebuilt with updated dependenciesLearn how to install or update PHPUnit 12.3 in the documentation.
Keep up to date with PHPUnit:
v12.3.12: PHPUnit 12.3.12Compare Source
phpunit.pharrebuilt with updated dependenciesLearn how to install or update PHPUnit 12.3 in the documentation.
Keep up to date with PHPUnit:
v12.3.11: PHPUnit 12.3.11Compare Source
Changed
__sleep()and__wakeup()from test double code generation on PHP >= 8.5Learn how to install or update PHPUnit 12.3 in the documentation.
Keep up to date with PHPUnit:
v12.3.10: PHPUnit 12.3.10Compare Source
Changed
E_DEPRECATEDissues when building the test suiteLearn how to install or update PHPUnit 12.3 in the documentation.
Keep up to date with PHPUnit:
v12.3.9: PHPUnit 12.3.9Compare Source
Changed
__sleep()method (which will be deprecated in PHP 8.5)Learn how to install or update PHPUnit 12.3 in the documentation.
Keep up to date with PHPUnit:
v12.3.8: PHPUnit 12.3.8Compare Source
Fixed
Learn how to install or update PHPUnit 12.3 in the documentation.
Keep up to date with PHPUnit:
v12.3.7: PHPUnit 12.3.7Compare Source
Changed
#[IgnorePhpunitDeprecations]is now considered for test runner deprecations (where applicable)Learn how to install or update PHPUnit 12.3 in the documentation.
Keep up to date with PHPUnit:
v12.3.6Compare Source
v12.3.5: PHPUnit 12.3.5Compare Source
Changed
error_reporting=E_ALLfor--check-php-configurationFixed
expectUserDeprecationMessage*()fails when test is run in separate processLearn how to install or update PHPUnit 12.3 in the documentation.
Keep up to date with PHPUnit:
v12.3.4: PHPUnit 12.3.4Compare Source
Changed
--check-php-configurationFixed
ini_set('error_log')sets filepath outsideopen_basedirLearn how to install or update PHPUnit 12.3 in the documentation.
Keep up to date with PHPUnit:
v12.3.3: PHPUnit 12.3.3Compare Source
Fixed
#[IgnorePhpunitDeprecations]is now considered for test runner deprecations" from PHPUnit 12.3.1)Learn how to install or update PHPUnit 12.3 in the documentation.
Keep up to date with PHPUnit:
v12.3.2: PHPUnit 12.3.2Compare Source
Changed
testSplObjectStoragemethods that will be deprecated in PHP 8.5Learn how to install or update PHPUnit 12.3 in the documentation.
Keep up to date with PHPUnit:
v12.3.1: PHPUnit 12.3.1Compare Source
Added
--check-php-configurationCLI option for checking whether PHP is configured for testingChanged
#[IgnorePhpunitDeprecations]is now considered for test runner deprecations (where applicable)Fixed
#[TestWith]or#[TestWithJson]attributes are now properly reportedDataProviderMethodFinishedevent is now also emitted when the provided data set has an invalid keyLearn how to install or update PHPUnit 12.3 in the documentation.
Keep up to date with PHPUnit:
v12.3.0: PHPUnit 12.3.0Compare Source
Added
#[IgnorePHPUnitWarnings]attribute for ignoring PHPUnit warnings#[TestDoxFormatter]and#[TestDoxFormatterExternal]attributes for configuring a custom TestDox formatter for tests that use data from data providersTestRunner\ChildProcessErroredeventConfiguration::includeTestSuites()andConfiguration::excludeTestSuites()Changed
@<data-set-name>format (compatible with--filterCLI option) in defect messages#[DataProvider*]attributes are mixed with#[TestWith*]attributesDeprecated
Configuration::includeTestSuite(), useConfiguration::includeTestSuites()insteadConfiguration::excludeTestSuite(), useConfiguration::excludeTestSuites()instead#[CoversNothing]on a test methodHow to install or update PHPUnit
v12.2.9: PHPUnit 12.2.9Compare Source
Fixed
fileattribute of<testClass>node of XML test list can be wrongHow to install or update PHPUnit
v12.2.8: PHPUnit 12.2.8Compare Source
Fixed
How to install or update PHPUnit
v12.2.7: PHPUnit 12.2.7Compare Source
Fixed
defects,randomconfiguration is supported by implementation, but it is not allowed by the XML configuration file schematestprefixHow to install or update PHPUnit
v12.2.6: PHPUnit 12.2.6Compare Source
Fixed
@no-named-argumentsleads to static analysis errors for variadic argumentsHow to install or update PHPUnit
v12.2.5: PHPUnit 12.2.5Compare Source
Fixed
<testsuite>element is missing requirednameattributeHow to install or update PHPUnit
v12.2.4: PHPUnit 12.2.4Compare Source
Changed
--include-git-informationCLI option or theincludeGitInformationattribute in the XML configuration fileHow to install or update PHPUnit
v12.2.3: PHPUnit 12.2.3Compare Source
Added
failOnPhpunitWarningattribute on the<phpunit>element of the XML configuration file and--fail-on-phpunit-warningCLI option for controlling whether PHPUnit should fail on PHPUnit warnings (default:true)--do-not-fail-on-deprecation,--do-not-fail-on-phpunit-warning,--do-not-fail-on-phpunit-deprecation,--do-not-fail-on-empty-test-suite,--do-not-fail-on-incomplete,--do-not-fail-on-notice,--do-not-fail-on-risky,--do-not-fail-on-skipped, and--do-not-fail-on-warningCLI options--do-not-report-useless-testsCLI option as a replacement for--dont-report-useless-testsDeprecated
--dont-report-useless-testsCLI option (use--do-not-report-useless-testsinstead)Fixed
ExpectationFailedExceptionHow to install or update PHPUnit
v12.2.2: PHPUnit 12.2.2Compare Source
Fixed
shortenArraysForExportThresholdXML configuration setting has no effect on all arrays exported for event-related value objectsHow to install or update PHPUnit
v12.2.1: PHPUnit 12.2.1Compare Source
Fixed
How to install or update PHPUnit
v12.2.0: PHPUnit 12.2.0Compare Source
Added
Experimental Support for Open Test Reporting XML
PHPUnit has supported reporting test results in the JUnit XML format for a long time. Unfortunately, there has never been a standard schema for the JUnit XML format. Common consumers of Clover XML log files interpret these files differently, which has led to frequent problems.
To address this, the JUnit team started the Open Test Reporting project, creating and maintaining language-agnostic XML and HTML test reporting formats. Unlike JUnit XML, Open Test Reporting's XML formats are extensible.
Logging in the Open Test Reporting XML format is controlled by the new
--log-otrCLI option and the new<otr>XML configuration element.This feature is experimental and the generated XML may change in order to enhance compliance with the Open Test Reporting project's XML schema definitions. The same applies to the XML schema definitions for information that is specific for PHP and PHPUnit. Please note that such changes may occur in bugfix or minor releases and could potentially break backwards compatibility.
Experimental Support for OpenClover XML
PHPUnit has supported reporting code coverage information in the Clover XML format for a long time. Unfortunately, there has never been a standard schema for the Clover XML format. Common consumers of Clover XML log files interpret these files differently, which leads to frequent problems.
The original commercial Clover project has been superseded by the Open Source OpenClover project, which provides an XML schema for its OpenClover XML format. Rather than modifying the existing Clover XML reporter to comply with the OpenClover XML schema, thereby breaking backward compatibility, a new OpenClover XML reporter has been introduced.
This new reporter is controlled by the new CLI option,
--coverage-openclover, and the new XML configuration element,<openclover>. This code coverage reporter generates XML documents that validate against the OpenClover project's XML schema definition, with one exception: the<testproject>element is not generated.The existing Clover XML reporter, controlled by the
--coverage-cloverCLI option and the<clover>XML configuration element, remains unchanged.This feature is experimental and the generated XML may change to enhance compliance with the OpenClover XML schema definition. Please note that such changes may occur in bugfix or minor releases and could potentially break backwards compatibility.
Miscellaneous
--with-telemetryCLI option that can be used together with--debugto print debugging information that includes telemetry informationTestCase::provideAdditionalInformation()method can now be used to emit aTest\AdditionalInformationProvidedeventTest\AfterLastTestMethodFailed,Test\AfterTestMethodFailed,Test\BeforeFirstTestMethodFailed,Test\BeforeTestMethodFailed,Test\PostConditionFailed,Test\PreConditionFailedevents are now emitted instead ofTest\AfterLastTestMethodErrored,Test\AfterTestMethodErrored,Test\BeforeFirstTestMethodErrored,Test\BeforeTestMethodErrored,Test\PostConditionErrored,Test\PreConditionErroredwhen theThrowableextendsAssertionFailedErrorto distinguish between errors and failures triggered in hook methodsTest\PreparationErroredevent is now emitted instead ofTest\PreparationFailedwhen theThrowabledoes not extendAssertionFailedErrorto distinguish between errors and failures triggered during test preparationTest\PreparationFailed::throwable()Changed
#[CoversNothing]and#[Covers*](or#[Uses*]) are used on a test class#[Covers*](or#[Uses*]) attribute is used multiple times on a test class#[Covers*]and#[Uses*]attributessetUp(), for example has a#[Test]attribute#[Small],#[Medium], or#[Large]is used on a test classHow to install or update PHPUnit
v12.1.6: PHPUnit 12.1.6Compare Source
Changed
createStubForIntersectionOfInterfaces()is called with a classHow to install or update PHPUnit
v12.1.5: PHPUnit 12.1.5Compare Source
Fixed
assertEmpty()andassertNotEmpty()use overly restrictivephpstan-assert emptydirectivesHow to install or update PHPUnit
v12.1.4: PHPUnit 12.1.4Compare Source
Added
displayDetailsOnAllIssuesattribute on the<phpunit>element of the XML configuration file and--display-all-issuesCLI option for controlling whether PHPUnit should display details on all issues that are triggered (default:false)failOnAllIssuesattribute on the<phpunit>element of the XML configuration file and--fail-on-all-issuesCLI option for controlling whether PHPUnit should fail on all issues that are triggered (default:false)Changed
E_STRICTconstantFixed
%aand%Amatches are not ignored from diff whenEXPECTFfailsHow to install or update PHPUnit
v12.1.3: PHPUnit 12.1.3Compare Source
Changed
memory_get_peak_usage()is now reset immediately before theTest\Preparedevent is emitted usingmemory_reset_peak_usage()so that (memory usage atTest\Finished- memory usage atTest\Prepared) is a better approximation of the memory usage of the testTelemetry\Infonow uses peak memory usage instead of memory usage (this affects--log-events-verbose-text)Fixed
error_log()is not displayed when test failsHow to install or update PHPUnit
v12.1.2: PHPUnit 12.1.2Compare Source
Fixed
How to install or update PHPUnit
v12.1.1: PHPUnit 12.1.1Compare Source
Fixed
willReturnMap()fails with nullable parameters when their default isnulland no argument is passed for themHow to install or update PHPUnit
v12.1.0: PHPUnit 12.1.0Compare Source
Added
expectErrorLog()for expectingerror_log()output#[WithEnvironmentVariable]for setting an environment variable for the duration of a testAfterTestMethodCalled,AfterTestMethodErrored,AfterTestMethodFinished,BeforeTestMethodCalled,BeforeTestMethodErrored,BeforeTestMethodFinished,PostConditionCalled,PostConditionErrored,PostConditionFinished,PreConditionCalled,PreConditionErrored, andPreConditionFinishedevent value objects now havetest()method that returns a value object representing the test method for which the hook method was calledChanged
phpunit --warm-coverage-cachebefore running tests.Deprecated
testClassName()method on theAfterTestMethodCalled,AfterTestMethodErrored,AfterTestMethodFinished,BeforeTestMethodCalled,BeforeTestMethodErrored,BeforeTestMethodFinished,PostConditionCalled,PostConditionErrored,PostConditionFinished,PreConditionCalled,PreConditionErrored, andPreConditionFinishedevent value objects (usetest()->className()instead)How to install or update PHPUnit
v12.0.10: PHPUnit 12.0.10Compare Source
Changed
How to install or update PHPUnit
v12.0.9: PHPUnit 12.0.9Compare Source
Fixed
with()on test doubles yields error with static analyzerHow to install or update PHPUnit
v12.0.8: PHPUnit 12.0.8Compare Source
Changed
How to install or update PHPUnit
v12.0.7: PHPUnit 12.0.7Compare Source
Fixed
How to install or update PHPUnit
v12.0.6: PHPUnit 12.0.6Compare Source
Fixed
$expectedand$actualare mixed up in failure description whenassertJsonFileEqualsJsonFile()failsHow to install or update PHPUnit
v12.0.5: PHPUnit 12.0.5Compare Source
Fixed
How to install or update PHPUnit
v12.0.4: PHPUnit 12.0.4Compare Source
Fixed
How to install or update PHPUnit
v12.0.3: PHPUnit 12.0.3Compare Source
Changed
TestCase::__construct()is now declaredfinal(it was annotated with@finalbefore and the announced changed from@finaltofinalfor PHPUnit 12 was forgotten)Fixed
includeUncoveredFilesconfiguration optionTest\PreparationFailedevent is now emitted in addition to aTest\Erroredevent when an unexpected exception is triggered in a before-test methodTest\Passedevent is no longer emitted in addition to aTest\FailedorTest\Erroredevent when an assertion failure or an unexpected exception is triggered in an after-test methodTestSuite\Finishedevent is now emitted when a before-first-test method errorsHow to install or update PHPUnit
v12.0.2: PHPUnit 12.0.2Compare Source
Changed
How to install or update PHPUnit
v12.0.1: PHPUnit 12.0.1Compare Source
Fixed
Assert::isType(),assertContainsOnly(),assertNotContainsOnly(), andcontainsOnly()How to install or update PHPUnit
v12.0.0: PHPUnit 12.0.0Compare Source
Added
#[CoversClassesThatExtendClass]and#[UsesClassesThatExtendClass]#[CoversClassesThatImplementInterface]and#[UsesClassesThatImplementInterface]#[CoversNamespace]and#[UsesNamespace]#[RequiresEnvironmentVariable]Changed
shortenArraysForExportThresholdis now10(limit export of arrays to 10 levels) instead of0(do not limit export of arrays)Deprecated
Assert::isType()(was soft-deprecated in PHPUnit 11.5)assertContainsOnly()(was soft-deprecated in PHPUnit 11.5)assertNotContainsOnly()(was soft-deprecated in PHPUnit 11.5)containsOnly()(was soft-deprecated in PHPUnit 11.5)Removed
TestCase::iniSet()TestCase::setLocale()TestCase::createTestProxy()TestCase::getMockForAbstractClass()TestCase::getMockFromWsdl()TestCase::getMockForTrait()TestCase::getObjectForTrait()MockBuilder::enableAutoload()andMockBuilder::disableAutoload()MockBuilder::allowMockingUnknownTypes()andMockBuilder::disallowMockingUnknownTypes()MockBuilder::enableProxyingToOriginalMethods(),MockBuilder::disableProxyingToOriginalMethods(), andMockBuilder::setProxyTarget()MockBuilder::getMockForTrait()MockBuilder::getMockForAbstractClass()MockBuilder::enableArgumentCloning()andMockBuilder::disableArgumentCloning()MockBuilder::addMethods()methodTestCasemethods for creating return stub configuration objectsassertStringNotMatchesFormat()andassertStringNotMatchesFormatFile()expects()on test stubs--group,--exclude-group,--covers,--uses, and--test-suffixCLI optionsrestrictDeprecationsattribute on the<source>element of the XML configuration file#[CoversClass]and#[UsesClass]attributesHow to install or update PHPUnit
v11.5.55: PHPUnit 11.5.55Compare Source
Fixed
Learn how to install or update PHPUnit 11.5 in the documentation.
Keep up to date with PHPUnit:
v11.5.54: PHPUnit 11.5.54Compare Source
Fixed
Learn how to install or update PHPUnit 11.5 in the documentation.
Keep up to date with PHPUnit:
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by Mend Renovate.
⚠️ Artifact update problem
Renovate failed to update an artifact related to this branch. You probably do not want to merge this PR as-is.
♻ Renovate will retry this branch, including artifacts, only when one of the following happens:
The artifact failure details are included below:
File name: composer.lock
[renovate-composer]: upgrade phpunit/phpunit - 11.5.53 → 13.1.9to [renovate-composer]: upgrade phpunit/phpunit - 11.5.53 → 13.1.9 - autoclosedPull request closed