> For the complete documentation index, see [llms.txt](https://docs.labrador-kennel.io/async-unit/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.labrador-kennel.io/async-unit/tutorials/test-timeout.md).

# Test Timeout

When writing asynchronous unit and integration tests there could be a possibility that your code executes for longer than expected or hangs on an async operation not properly handled. In these situations it can be helpful to fail the test after a defined period of time to ensure other tests can operate and test processing can finish without having to manually kill the process. You can easily add a timeout to a test by adding the `#[Timeout]` Attribute to the test, `TestCase`, or `TestSuite6`. The value provided should be the amount of milliseconds the test is expected to complete in.

```php
<?php

use Cspray\Labrador\AsyncUnit\TestCase;
use Cspray\Labrador\AsyncUnit\Attribute\Test;
use Cspray\Labrador\AsyncUnit\Attribute\Timeout;

class MyExceptionTestCase extends TestCase {

    #[Test]
    #[Timeout(100);
    public function checkExceptionThrown() {
        yield new Delayed(150);
        yield $this->asyncAssert()->floatEquals(3.14, 3.14);
    }

}
```

This test will be marked as a failure with a message indicating that it did not complete before the given timeout period.
