Sometimes, you may want to make one test method dependent on another. This is useful when a test requires the output of a previous test to proceed.
@depends
AnnotationIn PHPUnit, dependencies between tests can be established using the @depends
annotation.
<?php use PHPUnit\Framework\TestCase; class UserTest extends TestCase { public function testUserCanBeCreated() { $user = new User("John Doe"); $this->assertInstanceOf(User::class, $user); return $user; } /** * @depends testUserCanBeCreated */ public function testUserHasDefaultRole(User $user) { $this->assertEquals("guest", $user->getRole()); } }
Here testUserHasDefaultRole(User $user) method gets $user value from the testUserCanBeCreated method and is dependent on the testUserCanBeCreated
Test fixtures ensure that each test starts with a known state. PHPUnit provides setUp()
and tearDown()
methods to manage the test state before and after each test.
setUp()
and tearDown()
setUp()
: Runs before each test method.tearDown()
: Runs after each test method to clean up resources.<?php use PHPUnit\Framework\TestCase; class DatabaseTest extends TestCase { protected $db; protected function setUp(): void { $this->db = new DatabaseConnection(); $this->db->connect(); } public function testDatabaseConnection() { $this->assertTrue($this->db->isConnected()); } protected function tearDown(): void { $this->db->disconnect(); } }
This article explored PHPUnit test dependencies and how to use fixtures to manage test state. By leveraging @depends
, setUp()
, and tearDown()
, you can write more structured and maintainable unit tests. Next, we will discuss handling exceptions and mocking dependencies in PHPUnit.