Kategorien
PHP PHPUnit

PhpUnit 10 Call to undefined method PHPUnit\Framework\MockObject\MockBuilder::setMethods()

In PHPUnit 10 wurde setMethods entfernt, als Teil eines Bestrebens, die Verwendung von Mocks zu vereinfachen und zu modernisieren. Die Empfehlung ist nun, stattdessen die Methoden onlyMethods oder addMethods zu verwenden, je nachdem, was in Ihrem spezifischen Fall benötigt wird.

  • Verwenden von onlyMethods: Wenn Sie onlyMethods verwenden, mocken Sie nur die Methoden, die Sie benötigen, und alle anderen Methoden der ursprünglichen Klasse werden nicht gemockt und führen ihre normalen Operationen aus. In 99% aller Fälle kann setMethods durch onlyMethods ersetzt werden.
  • Verwenden von addMethods: addMethods wird verwendet, wenn Sie neue Methoden zu Ihrem Mock hinzufügen möchten, die in der ursprünglichen Klasse nicht existieren.

Beispiel, in dem nur die Methode sentMail gemockt werden soll:

PhpUnit < 10:

$mailsMock = $this->getMockBuilder(Mail::class)
    ->setMethods(['sentMail'])
    ->disableOriginalConstructor()
    ->getMock();

PhpUnit >= 10:

$mailsMock = $this->getMockBuilder(Mail::class)
    ->onlyMethods(['sentMail'])
    ->disableOriginalConstructor()
    ->getMock();

Diese Änderung soll dazu beitragen, dass der Zweck der Mocks klarer wird und Missverständnisse bei der Verwendung vermieden werden. Es ist auch ein Schritt in Richtung einer strengeren und präziseren Mocking-Praxis, die besser definiert, welche Teile eines Objekts für den Test relevant sind.