Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

Diskuze: Testováná privátnách metod | Selenium

PHP PHP Testováná privátnách metod | Selenium American English version English version

Aktivity (1)
Avatar
Lukáš Novák:12. srpna 11:06

Zdravím, potřeboval bych otestovat pár privátních metod v třídě MainCotroller.
Obsah mojí testovací třídy vypadá následovně:

use Controllers\MainController;

class MainControllerTest extends PHPUnit_Framework_TestCase
{

        /** @var  MainController */
        private $mainController;

        /** @before */
        protected function before()
        {
                \Codeception\Util\Autoload::addNamespace('Controlles',__DIR__ . '/../../Controllers');
                $this->mainController = new MainController();
        }

        function testDataParse()
        {
                $this->assertEquals(['test'] ,$this->invokeMethod($this->mainController, 'parseURL', ['/test/']));
        }

        /**
         * Call protected/private method of a class.
         *
         * @param object &$object    Instantiated object that we will run method on.
         * @param string $methodName Method name to call
         * @param array  $parameters Array of parameters to pass into method.
         *
         * @return mixed Method return.
         */
        public function invokeMethod(&$object, $methodName, array $parameters = array())
        {
                $reflection = new \ReflectionClass(get_class($object));
                $method = $reflection->getMethod($methodName);
                $method->setAccessible(true);

                return $method->invokeArgs($object, $parameters);
        }
}

Při spuštění mi to ale nahlásí chybu:

ReflectionException : Method parseURL does not exist

Celkem mě to udivuje, protože v MainController mám

private function parseURL($url)
{  ...

Nevíte proč mi to háže takovou chybu, když na funkce existuje?

 
Odpovědět 12. srpna 11:06
Avatar
ConflictBoy
Člen
Avatar
ConflictBoy:14. srpna 1:02

No zřejmě proto, že je metoda privátní a skript se k ní tak nedostane :)
Takže si přepiš definici metody třeba na toto -

public function parseURL($url) {}

Viz
https://www.interval.cz/…viditelnost/

Nahoru Odpovědět  -1 14. srpna 1:02
I'm programmer, I have no life :)
Avatar
Odpovídá na Lukáš Novák
Petr Štechmüller:14. srpna 9:11

Ahoj, ty privátní metody obvykle musí volat nějaká veřejná metoda, takže musíš test napsat tak, aby jsi zavolal všemi možnými způsoby tu veřejnou metodu díky které se pak zavolá i ta privátní.

Jsi si jistý, že proměnná $reflection opravdu obsahuje třídu?
http://php.net/…cessible.php

Nahoru Odpovědět 14. srpna 9:11
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.