PHP 7.3 reaches end of support in December 2021 and Adobe Commerce 2.3.x reaches end of support in April 2022. We strongly recommend planning your upgrade now to Adobe Commerce 2.4.x and PHP 7.4.x to help maintain PCI compliance.

Depends Annotation

The @depends annotation helps you to define some dependencies between methods.

Format

1
2
3
/**
 * @depends methodName
 */

Please note that dependencies don’t define the order in which the test methods are executed, so you still have to keep to proper order for your methods.

Example 1

Let’s check the following basic example.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
 * @return int
 */
public function testOne(): int
{
    $number = 2;
    $this->assertEquals(2, $number);

    return $number;
}

/**
 * @depends testOne
 *
 * @param $number
 */
public function testNumber($number)
{
    $this->assertEquals(2, $number);
}

Example 2

If using multiple dependencies, arguments are passed in the annotations’ defined order.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
 * @return int
 */
public function testTwo(): int
{
    $number = 2;
    $this->assertEquals(2, $number);

    return $number;
}

/**
 * @return int
 */
public function testOne(): int
{
    $number = 1;
    $this->assertEquals(1, $number);

    return $number;
}

/**
 * @depends testOne
 * @depends testTwo
 *
 * @param $one
 * @param $two
 */
public function testNumber(int $one, int $two)
{
    $this->assertEquals(1, $one);
    $this->assertEquals(2, $two);
}

Example 3

Let’s check the following practical example, where we’ll be checking the customer email by customer ID.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
use Magento\Customer\Api\CustomerRepositoryInterface;
use Magento\Customer\Api\Data\CustomerInterface;
use Magento\TestFramework\Helper\Bootstrap;
...

/**
 * @magentoDataFixture Magento/Customer/_files/customer.php
 */
public function testLoadCustomer(): CustomerInterface
{
    $customerId = 1;
    $objectManager = Bootstrap::getObjectManager();
    $customerRepository = $objectManager->create(CustomerRepositoryInterface::class);

    return $customerRepository->getById($customerId);
}

/**
 * @depends testLoadCustomer
 *
 * @param CustomerInterface $customer
 */
public function testEmail(CustomerInterface $customer)
{
    $this->assertEquals('customer@example.com', $customer->getEmail());
}

You can read more about PHPUnit dependency annotation here.