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 SieonlyMethods
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.