PHPUnit: тестирование is_a в нескольких условиях с использованием провайдера данных - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь написать тест для следующего метода:

/**
 * @dataProvider attributesValuesProvider
 */
public function myFunction($entityObject, $diffArr, $prevArr)
{
    ....
    ....

    if (is_a($entityObject, Customer::class)) {
        $entityType = CustomerMetadataInterface::ENTITY_TYPE_CUSTOMER;
    } elseif (is_a($entityObject, Address::class)) {
        $entityType = AddressMetadataInterface::ENTITY_TYPE_ADDRESS;
    } else {
        $entityType = null;
    }
    ....
    ....

    return $entityType;
}

Я определил следующий поставщик данных:

public function attributesValuesProvider()
{
    return [
        [null, [], []],
        [Customer::class, [], []],
        [Address::class, [], []],
    ];
}

Я исказил это со всех сторон и до сих пор не могу придумать, как написать этот тест. У меня нет соответствующего опыта в модульных тестах, поэтому я могу ошибиться.

1 Ответ

1 голос
/ 08 июня 2019

Ваш поставщик данных должен предоставить ожидаемый результат, а также параметры метода. Простой пример приведен в документации по PHPUnit.

public function attributesValuesProvider()
{
    return [
        [null, [], [], null],
        [new Customer, [], [], CustomerMetadataInterface::ENTITY_TYPE_CUSTOMER],
        [new Address, [], [], AddressMetadataInterface::ENTITY_TYPE_ADDRESS],
    ];
}

Тест, использующий поставщик данных, будет выполнен один раз для каждой строки в поставщике со всеми значениями встрока передана в качестве аргументов.Таким образом, ваш тест должен принять все четыре аргумента, вызвать метод и убедиться, что ожидаемый результат был возвращен.

/**
 * @dataProvider attributesValuesProvider
 */
public function testMyFunction($object, $diff, $prev, $expected_result) {

    $example = new YourClass();
    // or maybe you already created this object in your setUp method?

    $actual_result = $example->myFunction($object, $diff, $prev);
    $this->assertSame($expected_result, $actual_result);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...