Magento 2.1.18 is the final 2.1.x release. After June 2019, Magento 2.1.x will no longer receive security patches, quality fixes, or documentation updates.
To maintain your site's performance, security, and PCI compliance, upgrade to the latest version of Magento.

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.

Updated