# AsyncUnit

## AsyncUnit

- [Labrador AsyncUnit](https://docs.labrador-kennel.io/async-unit/master.md): Documentation for getting started with writing unit and integration tests with Labrador's AsyncUnit. Combine the power of PHP8 and Amp's Loop to write tests with first-class async support!
- [Getting Started](https://docs.labrador-kennel.io/async-unit/tutorials/getting-started.md): TestCases are the fundamental building block in AsyncUnit. Write tests and use hooks to setup and tear down necessary state.
- [TestCase Hooks](https://docs.labrador-kennel.io/async-unit/tutorials/testcase-hooks.md): Hooks provide robust functionality to perform operations around each test. Provides equivalent of PHPUnit's setUp and tearDown methods... with full asynchronous support.
- [Test Suites](https://docs.labrador-kennel.io/async-unit/tutorials/test-suites.md): Organize TestCases and expose functionality for all of the associated TestCases in one place. A fundamental concept for integration testing capabilities provided by AsyncUnit!
- [Disabling Tests](https://docs.labrador-kennel.io/async-unit/tutorials/disabling-tests.md): Sometimes you might need to disable a test for a variety of reasons. With AsyncUnit you can disable your tests, TestCases, and TestSuites with the Disabled Attribute!
- [Data Providers](https://docs.labrador-kennel.io/async-unit/tutorials/data-providers.md): Sometimes tests need to make the same assertions over many different types of data. Using #\[DataProvider] can help reduce the amount of test duplication when you encounter this scenario.
- [Making Expectations](https://docs.labrador-kennel.io/async-unit/tutorials/making-expectations.md): Complex test suites need to make expectations about how a test might run that can't be accomplished with the assertion API. Learn how to use expectations as another form of validating tests.
- [Test Timeout](https://docs.labrador-kennel.io/async-unit/tutorials/test-timeout.md): Control runaway async code by ensuring that tests complete within a giving time period using the #\[Timeout] Attribute!
- [Writing Custom Assertions](https://docs.labrador-kennel.io/async-unit/how-to/writing-custom-assertions.md): Any complex test suite will come across the need to create its own assertions. AsyncUnit aims to make your custom Assertion an easy-to-use, first-class citizen within the testing framework.
- [Assertions](https://docs.labrador-kennel.io/async-unit/reference/assertions.md)
- [Events](https://docs.labrador-kennel.io/async-unit/reference/events.md): Events power much of functionality outside of parsing and running your tests. See which events we emit and implement your own functionality!
- [Hooks](https://docs.labrador-kennel.io/async-unit/reference/hooks.md): A comprehensive look at the entire Hook lifecycle for a defined TestSuite and TestCase.
- [CLI Tool](https://docs.labrador-kennel.io/async-unit/reference/cli-tool.md): What's a test framework if you can't run it? Bundled with the framework is a Symfony Console application for running your test suites.
- [Internal Overview](https://docs.labrador-kennel.io/async-unit/reference/internal-overview.md): The guide for developers contributing to AsyncUnit.
- [AsyncUnit vs PHPUnit](https://docs.labrador-kennel.io/async-unit/asyncunit-vs-phpunit.md): Now that you clicked on the provocative title let's talk about PHPUnit! And why you should be thinking of AsyncUnit as an addition to your PHPUnit tests and not a replacement.
- [Roadmap](https://docs.labrador-kennel.io/async-unit/roadmap.md): The Roadmap defines what features are currently being worked on and what's next!
