PHPUnit and PHP_CodeCoverage currently support the `@covers` annotation to denote which unit(s) of code a test wants to cover: ``` php class BankAccount { public function deposit(Money $money) { // ... } } class BankAccountTest extends PHPUnit_Framework_TestCase { /** * @covers BankAccount::deposit */ public function testMoneyCanBeDepositedInAccount() { // ... } } ``` When the `@covers` annotation is used, any code coverage for code that is not specified using a `@covers` annotation but executed during the test is discarded. This code should (optionally) be marked as executed (but not as covered / tested) in the HTML code coverage report. In Strict Mode, PHPUnit 4.0 (PHP_CodeCoverage 2.0) will fail a test that uses the `@covers` annotation and code is executed that is not specified using a `@covers` annotation. This leads to a problem when the unit of code under test uses a value object (which does not make sense to stub) as this object, too, would need to be listed using the `@covers` annotation in order for the test to succeed. Listing the value object using the `@covers` annotation, however, leads to false code coverage for the value object's code as it is not actually tested in this test. To solve this problem, a new annotation, `@uses`, should be added: ``` php class BankAccountTest extends PHPUnit_Framework_TestCase { /** * @covers BankAccount::deposit * @uses Money */ public function testMoneyCanBeDepositedInAccount() { // ... } } ``` Units of code that are listed using the `@uses` annotation are allowed to be executed during the test but no code coverage information will be collected for them.