Er det mulig, ved hjelp av PHPUnit mock-objekter, kan forvente en samtale til en magisk __call () metoden?

stemmer
28

Jeg har en mock objekt i en test. Den virkelige objektet, PageRepository, implementerer en magisk metode med __call (), så hvis du kaller $ pageRepository-> findOneByXXXX ($ value_of_field_XXXX), vil den søke i databasen etter poster som sams som parameter.

Er det en måte å spotte at metoden?

Den virkelige metodekall vil se omtrent slik ut:

$homepage = $pageRepository->findOneBySlug('homepage');

Testen vil se slik ut:

$mockPageRepository->expects($this->any())
    ->method('findOneBySlug')
    ->will($this->returnValue(new Page()));

Men det virker ikke - PHPUnit ikke øye på metodekallet. Den eneste måten å få det til å se metoden er å definere metoden eksplisitt i PageRepository.

Publisert på 02/06/2011 klokken 05:14
kilden bruker
På andre språk...                            


1 svar

stemmer
43

PHPUnit s getMock()tar et sekund argumentet, en matrise med navn på metoder for å bli spottet. Hvis du inkluderer en metode navn i denne tabellen, vil mock objekt inneholder en metode med det navnet, som expects()og venner vil jobbe med.

Dette gjelder også for metoder som ikke er definert i den "virkelige" klasse, så omtrent slik bør gjøre triks:

$mockPageRepository = $this->getMock('PageRepository', array('findOneBySlug'));

Husk at du må eksplisitt inkludere eventuelle andre metoder som også trenger å bli hånet, siden bare metodene nevnt i matrisen er definert for mock objekt.

Svarte 02/06/2011 kl. 05:27
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more