PHPUnit - Private Method Test Etmek
PHPUnit - Private Method Test Etmek

13 Dec, 2022 2 dk

PHPUnit - Private Method Test Etmek

13 Dec, 2022

2 dk

PHPUnit - Private Method Test Etmek

PHP de bir class'ın private yada protected methoduna dışardan ulaşmak mümkün değildir. Bu sebeple bu methodları test amaçlı da olsa dışardan tetikletemiyoruz. Bunu yapmanın bir yolu yok değil, ReflectionClass kullanarak bu methodlara erişebiliyoruz.

Örneğin bir User class'ımız olsun ve private fullname() methoduna sahip olsun. Öncelikle bu User class'ından bir ReflectionClass oluşturmalıyız.

$user = new User();
$reflectionClass = new ReflectionClass($user);

Artık bu ReflectionClass sayesinde methodların dışarıdan erişilebilir olmasını sağlayabiliyoruz.

Bunun için setAccessible() methodunu kullanıyoruz.

$method = $reflectionClass->getMethod('fullname');
$method->setAccessible(true);

Erişmek istediğimiz methodu ismi ile aldık ve dışarıdan erişilebilir yani bir bakıma public yaptık. Tabi sadece bu refleciton class için geçerli bu public durumu.

Artık bu methodu çalıştırabiliriz, ancak artık elimizdeki $method nesnesini yani ReflectionMethod'u kullanacağız.

$method->invokeArgs($param1, $param2);

invokeArgs() methodu ile public yaptığımız methoda bir parametre vererek çalıştırabiliriz. Eğer parametresiz bir method ise de sadece invoke() methodunu kullanabiliriz.

$method->invoke();

Yukardaki işlemlerin tamamı bu şekilde olacaktır;

$user = new User();
$reflectionClass = new ReflectionClass($user);
$method = $reflectionClass->getMethod('fullname');
$method->setAccessible(true);
$method->invoke();
İLGİLİ MAKALELER
İLGİLİ KOD PARÇALARI