Как получить экземпляр объекта при выполнении модульного теста с использованием Symfony и PHPUnit? - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь провести модульный тест в среде, как сказано в заголовке. Однако для метода, содержащегося в тестируемом классе, в качестве аргумента требуется экземпляр сущности. Итак, я пытаюсь получить указанную выше сущность в общем тестовом классе c homebrew, который расширяет класс TestCase, но я не могу понять, как это сделать. У меня мало опыта функционального тестирования. В то время я использовал светильники, так что я предполагаю, что мне следует использовать светильники и в этот раз. Это правильно? Я был бы признателен, если бы вы также научили меня, как это сделать.

Пожалуйста, дайте мне знать, даже небольшую информацию.

ниже - это тестовый класс и интерфейс тестовой цели .

пс. мы используем пакет nelmio / alice.

<?php

declare(strict_types=1);

namespace xxx\xxxx\Tests\Customize\Server\AlladinOffice;

use Codeception\PHPUnit\TestCase;
use Customize\Service\AlladinOffice\CodeFormatter;
use Customize\Service\AlladinOffice\CustomerCode;
use Doctrine\Common\Persistence\ObjectManager;
use Eccube\Repository\CustomerRepository;
use PHPUnit\Framework\MockObject\MockObject;
use Proxies\__CG__\Eccube\Entity\Customer;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;

class CustomerCodeTest extends KernelTestCase
{
    /**
     * @var CustomerCode
     */
    private $sut;

    /**
     * @var CustomerRepository|MockObject
     */
    private $customerRepository;

    protected function setUp()
    {
        $codeFormatter = new CodeFormatter();
        $this->sut = new CustomerCode($codeFormatter);
        $this->customerRepository = $this->createMock(CustomerRepository::class);
        parent::setUp();
    }

    public function testGetCustomerCode()
    {
        $actual = $this->sut->getCustomerCode(null);
        $expected = 1000000000;
        $this->assertEquals($expected, $actual);

//        $customer = $this->customerRepository->findBy([], ['id' => 'ASC']);
//        dump($customer);exit();
//        $actual = $this->sut->getCustomerCode($customer);
        $customer = new Customer;
        //$customer->set

        //$this->customerRepository
            //->expects($this->any())
            //->method('find')
            //->willReturn($);
    }
}

<?php

declare(strict_types=1);

namespace Customize\Service\AlladinOffice;

use Eccube\Entity\Customer;

interface CustomerCodeInterface
{
    public function getCustomerCode(?Customer $customer): string;

    public function getChannelCode(?Customer $customer): string;

    public function getRankCode(?Customer $customer): string;
}

, например, подробный метод тестирования.

    public function getCustomerCode(?Customer $customer): string
    {
        if (!$customer) {
            return self::DEFAULT_CUSTOMER_CODE;
        }
        $customerRank = $customer->getXxxCustomer()->getCustomerRank();

        $customerChannel = $customerRank ? $customerRank->getCustomerChannel() : null;
        if (!$customerChannel || !$customerChannel->isExportToAO()) {
            return self::DEFAULT_CUSTOMER_CODE;
        }

        return $this->formatter->getCustomerCodeFromCustomerId($customer->getId());
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...