Skip to content

Deprecate TestCase::getObjectForTrait() #5244

Closed
@sebastianbergmann

Description

PHPUnit can automatically generate test stubs and mock objects (test doubles) based on interfaces and classes.

For quite a while, PHPUnit has offered the createStub() and createMock() methods for creating test stubs and mock objects with best practice defaults. Furthermore, alternatives such as getMockForTrait() exist, but not all of them offer the same clear separation between test double and mock object. For instance, no method named getStubForTrait() exists. Such an inconsistency can lead to confusion.

The getObjectForTrait() method returns a mock object for an otherwise empty class that uses a specified trait. This allows for testing the concrete methods of a trait.

Having to use getObjectForTrait() to test something is almost always a code smell: something is not quite right with the software design of the system-under-test.

To promote better software design, improve the readability of test code, and to reduce complexity inside PHPUnit's test double functionality, TestCase::getObjectForTrait() will be deprecated and then removed:

  • soft deprecation in PHPUnit 10.1 (add @deprecated annotation to the method declaration)
  • deprecation in PHPUnit 11 (using the method will trigger a deprecation)
  • removal in PHPUnit 12

Metadata

Labels

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions