मेरी MyClass कक्षा की एक विधि जिसका मैं परीक्षण करना चाहता हूं, इस तरह दिखती है:

public function needs()
{
    $domains = $this->em->getRepository(WebDomain::class)->findBy(array(
        'client' => $this->client
    ));

    $hosting = $this->em->getRepository(WebHosting::class)->findBy(array(
        'client' => $this->client
    ));

    if($domains !== null && $hosting !== null){
        return true;
    }

    return false;
}

सिम्फनी के डॉक्यूमेंटेशन को देख रहे हैं मैं इस तरह एक परीक्षण बनाता हूं:

public function testNeeds()
{
    $em = $this->createMock(ObjectManager::class);
    $client = new Client();

    /**
     * Add WebHosting to Client
     */
    $webHosting = new WebHosting();
    $webHosting->setClient($client);

    /**
     * Create a new WebDomain for Client/WebHosting
     */
    $webDomain = new WebDomain();
    $webDomain->setClient($client);
    $webDomain->setWebHosting($webHosting);

मुझे पता है कि एक नकली भंडार कैसे बनाया जाता है (उदाहरण के लिए आवश्यक $domains):

$domains = $this->createMock(ObjectRepository::class);
$domains->expects($this->any())
    ->method('findBy')
    ->willReturn($client->getWebDomain());

$em->expects($this->any())
    ->method('getRepository')
    ->willReturn($domains);

$myClass = new MyClass($client, $em);

तो मेरी समझ से, यह एक मजाक बनाता है कि जब भी विधि findBy को कॉल किया जाता है, तो $domains लौटाएं, लेकिन आवश्यक $hosting वापस करने के लिए मुझे क्या जोड़ना होगा?

मुझे संदेह है कि इसका $this->any() के साथ कुछ लेना-देना है, मुझे लगता है कि मुझे इसे expects(WebDomain::class) तक सीमित करना होगा (जो कि काम नहीं करता है)।

चूंकि मैं सिम्फनी (और सामान्य रूप से) में यूनिटटेस्ट के लिए बिल्कुल नया हूं, मुझे सही मैनुअल की ओर इशारा करते हुए भी मदद मिल सकती है। शुक्रिया!

0
PrimuS 10 मई 2019, 13:29

1 उत्तर

सबसे बढ़िया उत्तर

आपके मामले में आपको getRepository विधि को दिए गए तर्क के आधार पर अलग Repository वापस करना चाहिए। कुछ इस तरह:

$emMock
    ->method('getRepository')
    ->will($this->returnValueMap([
       [WebDomain::class, $webDomainRepositoryMock),
       [WebHosting::class, $webHostingRepositoryMock)
    ]));

नोट: दोनों रिपॉजिटरी के लिए findBy को कॉन्फ़िगर करना याद रखें।

1
Kamil Adryjanek 10 मई 2019, 11:21