blob: d30a13fe1318d39cf7d1ea56cbaed4dc15d25f82 [file] [log] [blame] [view]
# Test Components
## Introduction
Test components are [components][glossary.component] that implement a test.
Tests run in a given environment, and then report whether they passed or failed.
Typically tests are written using various testing frameworks, and may report
more detailed results such as whether individual test cases within a test suite
passed or failed.
The Component Framework allows launching tests as components. Most tests are
comprised of a single component - these are typically referred to as unit tests.
Some tests exercise multiple components working together - these are typically
referred to as integration tests.
## Creating a test component and package
A test package may contain one or more test components.
Test components are components that implement a test suite.
Test packages can also contain other components that are not the test itself,
but participate in the test. For instance:
- A package may contain a single test component that implements a unit test
that exercises some business logic.
- A package may contain a test component and a second component that implements
a service. The test component may then act as a client of the second
component, which makes for an integration test between client and server code.
Both the clients and server are located in the same package in order to ensure
that the second component is present and can be launched by the test
component.
In order to define your test package and components, you should use the
appropriate build rules. Refer to the [test packages][test-packages] guide.
## Test component manifest
Every component has a [manifest][component-manifest]. Test components follow the
same manifest syntax as any other components.
A component manifest for a simple unit test might be named `meta/my_test.cml`
and look as follows:
```json5
{
include: [
"syslog/client.shard.cml",
"//src/sys/test_runners/gtest/default.shard.cml"
]
program: {
binary: "bin/my_test"
}
}
```
Component manifests for simple unit tests can be [generated][unit-tests]
by the build rules.
## Running your test
To run a Fuchsia test out of your build, execute:
<pre class="prettyprint">
<code class="devsite-terminal">fx test <var>TEST_NAME</var></code>
</pre>
For more information, see [Run Fuchsia tests][executing-tests].
## Further reading
- [Test Runner Framework][trf]: writing idiomatic tests in different languages
and using common testing frameworks.
- [Complex topologies and integration testing][integration-testing]: testing
interactions between multiple components in isolation from the rest of the
system.
[component-manifest]: /docs/concepts/components/v2/component_manifests.md
[glossary.component]: /docs/glossary/README.md#component
[executing-tests]: /docs/development/testing/run_fuchsia_tests.md
[integration-testing]: integration_testing.md
[test-packages]: /docs/development/components/build.md#test-packages
[trf]: test_runner_framework.md
[unit-tests]: /docs/development/components/build.md#unit-tests