Problem/Motivation

PHPUnit 12.5.0+ is changing the way that mock objects work:

  • Mock objects that do not configure expectations should be converted to stubs. Otherwise, they throw a notice: No expectations were configured for the mock object for \Drupal\comment\CommentManagerInterface. You should refactor your test code and use a test stub instead.
  • $this->any() is deprecated. It was equivalent to having no expectation, in which case the object should be a stub (see the previous bullet) or a more exact number of expectations should be added.
  • with() is deprecated for stubs because it was deemed to be equally pointless.

Steps to reproduce

  1. Require PHPUnit 12 with Composer.
  2. Fix compatibility issues with PHPUnit 12 by applying this patch.
  3. Run the Unit tests for a library with --display-phpunit-notices --display-phpunit-deprecations.
  4. Observe the PHPUnit notices that occur.

Proposed resolution

Fix notices in the tests for the following core libraries, which currently only represents 10 affected classes.

  • core/tests/Drupal/Tests/Core/Lock/
  • core/tests/Drupal/Tests/Core/Logger/
  • core/tests/Drupal/Tests/Core/Mail/
  • core/tests/Drupal/Tests/Core/Path/
  • core/tests/Drupal/Tests/Core/PathPreprocessor/
  • core/tests/Drupal/Tests/Core/PreWarm/

Remaining tasks

User interface changes

Introduced terminology

API changes

Data model changes

Release notes snippet

Issue fork drupal-3579858

Command icon Show commands

Start within a Git clone of the project using the version control instructions.

Or, if you do not have SSH keys set up on git.drupalcode.org:

Comments

dcam created an issue. See original summary.

dcam’s picture

Status: Active » Needs review
smustgrave’s picture

Status: Needs review » Needs work

Lock = no deprecations
Logger = no deprecations
Mail =

Test Triggered PHPUnit Notice (Drupal\Tests\Core\Mail\MailManagerTest::testGetInstance)
No expectations were configured for the mock object for Drupal\Core\Config\ImmutableConfig. Consider refactoring your test code to use a test stub instead. The #[AllowMockObjectsWithoutExpectations] attribute can be used to opt out of this check.
Test Triggered PHPUnit Notice (Drupal\Tests\Core\Mail\MailManagerTest::testGetInstance)
No expectations were configured for the mock object for Drupal\Core\Config\Config. Consider refactoring your test code to use a test stub instead. The #[AllowMockObjectsWithoutExpectations] attribute can be used to opt out of this check.
Test Triggered PHPUnit Notice (Drupal\Tests\Core\Mail\MailManagerTest::testGetInstance)
No expectations were configured for the mock object for Drupal\Core\Config\ImmutableConfig. Consider refactoring your test code to use a test stub instead. The #[AllowMockObjectsWithoutExpectations] attribute can be used to opt out of this check.
Test Triggered PHPUnit Notice (Drupal\Tests\Core\Mail\MailManagerTest::testGetInstance)
No expectations were configured for the mock object for Drupal\Core\Config\Config. Consider refactoring your test code to use a test stub instead. The #[AllowMockObjectsWithoutExpectations] attribute can be used to opt out of this check.
Test Triggered PHPUnit Notice (Drupal\Tests\Core\Mail\MailManagerTest::testGetInstance)
No expectations were configured for the mock object for Drupal\Core\Config\ConfigFactoryInterface. Consider refactoring your test code to use a test stub instead. The #[AllowMockObjectsWithoutExpectations] attribute can be used to opt out of this check.
Test Triggered PHPUnit Notice (Drupal\Tests\Core\Mail\MailManagerTest::testGetInstance)
No expectations were configured for the mock object for Drupal\Core\StringTranslation\TranslationInterface. Consider refactoring your test code to use a test stub instead. The #[AllowMockObjectsWithoutExpectations] attribute can be used to opt out of this check.

Path = Got 10 still example

Test Triggered PHPUnit Notice (Drupal\Tests\Core\Path\PathMatcherTest::testMatchPath#0)
No expectations were configured for the mock object for Drupal\Core\Config\ImmutableConfig. Consider refactoring your test code to use a test stub instead. The #[AllowMockObjectsWithoutExpectations] attribute can be used to opt out of this check.
Test Triggered PHPUnit Notice (Drupal\Tests\Core\Path\PathMatcherTest::testMatchPath#0)
No expectations were configured for the mock object for Drupal\Core\Config\Config. Consider refactoring your test code to use a test stub instead. The #[AllowMockObjectsWithoutExpectations] attribute can be used to opt out of this check.
Test Triggered PHPUnit Notice (Drupal\Tests\Core\Path\PathMatcherTest::testMatchPath#0)
No expectations were configured for the mock object for Drupal\Core\Config\ConfigFactoryInterface. Consider refactoring your test code to use a test stub instead. The #[AllowMockObjectsWithoutExpectations] attribute can be used to opt out of this check.
Post Condition Method Called (Drupal\Tests\Core\Path\PathMatcherTest::verifyProphecyDoubles)

PathPreprocess = got 1
Prewarm = 0

dcam’s picture

Status: Needs work » Needs review

Thank you again for pointing them out. I'm going to be better about noting the notices covered by other MRs.

The mentioned notices are covered by #3578904: Convert expectation-less test mocks to stubs - UnitTestCase. When I run the tests without the #3578904 changes I get 14 notices from these tests. When I apply the MR from #3578904 I get 0.

smustgrave’s picture

Title: Convert expectation-less test mocks to stubs - batch 6 » Convert expectation-less test mocks to stubs - Lock, Logger, Mail, Path, PathPreprocessor, and Prewarm
Status: Needs review » Reviewed & tested by the community

Retested mail, path, and pathpreprocess and all 0

  • catch committed 2f97f97a on main
    task: #3579858 Convert expectation-less test mocks to stubs - Lock,...
catch’s picture

Status: Reviewed & tested by the community » Fixed

This looks fine, some of the tests start to look a bit repetitive - lots of the same method calls in various test methods, but that's something we can look at if someone ever decides to refactor the tests and might not be easy to change anyway.

Committed/pushed to main, thanks!

Now that this issue is closed, review the contribution record.

As a contributor, attribute any organization that helped you, or if you volunteered your own time.

Maintainers, credit people who helped resolve this issue.

Status: Fixed » Closed (fixed)

Automatically closed - issue fixed for 2 weeks with no activity.