PHPUnit ile Private Property'leri Set Etme

20 Jun, 2024 1 dk

Test yazarken bazen karşımıza testin seyrini değiştiren bir private property çıkabilir. Private yada protected property'ler php içerisinde dışardan set edilemez, yalnızca içerden set edilebilirler. Bu durumda testi nasıl yazacağız?

Bunu elimine etmek için ilgili class'ı mockladıktan sonra sanki içinden set eder gibi set edebileceğimiz bir fonksiyon yazabiliyoruz.

Öncelikle senaryomuzun bir abstract class olduğunu varsayalım. Bu class için bir mock class oluşturalım.

Örneğimiz bir BaseRequest class'ı olsun ve içeride farklı Request classlarının türetildiği class olduğunu düşünün.

$mockBaseRequest = $this->getMockForAbstractClass(BaseRequest::class);

getMockForAbstractClass() methodu ile ilgili class'ın mockunu oluşturduk.

Daha sonra aşağıdaki gibi bir fonksiyon ile class içerisindeki $requestType prop'unu set edebiliriz.

(fn () => $mockBaseRequest->requestType = 'API')->call($mockBaseRequest);

Bu küçük fonksiyon mockBaseRequest nesnesinin private olan requestType propunu set etmiş oluyor.

Daha sonra dilediğiniz gibi testi yazabilirsiniz.

İLGİLİ MAKALELER
İLGİLİ KOD PARÇALARI