Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[docs] Document tools tests workflow #101186

Merged
merged 2 commits into from
Apr 17, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 45 additions & 0 deletions docs/workflow/testing/testing-managed-tools.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# Testing managed tools

There are managed unit and functional tests for a number of tools including the
compiler for NativeAOT (`ILCompiler`), and the trimmer (`illink`).

## Adding new testsuites

To add a new test suite, create a new `.csproj` with a name that ends in `Tests`, such as:
`MyTool.Tests.csproj`. The property `IsTestProject` will be set by the `Directories.Build.props` in
the repository root. The property will, in turn, add references to the xunit package and the
apropriate test runner.

Now add a `ProjectToBuild` item in `eng/Substes.props` to one of the existing subsets, such as
`clr.toolstests`, or a new subset.

## Adding new testsuites to CI

To run the tests in CI, add a new pipeline or add to an exsiting pipeline such as `CLR_Tools_Tests`
in `eng/pipelines/runtime.yml`. Update the trigger condition, perhaps by adding a new set of paths
to `eng/pipelines/common/evaluate-default-paths.yml` in order to run the tests when the tool source
or the test sources change.

## Running tests locally

Build and run the tests locally either with

```console
./build.[sh|cmd] -s clr.toolstests -c [Release|Debug] -build -test
```

or

```console
./dotnet.[sh|cmd] test .../MyTool.Tests.csproj -c [Release|Debug]
```

The `dotnet-test` xunit filter mechanisms work to run a single test or a subset of the tests

```console
./dotnet.[sh|cmd] test .../MyTool.Tests.csproj -c [Release|Debug] --filter "FullyQualifiedName~MyTest"
```

The above command runs all tests whose fully-qualified name contains the substring `MyTest`. See
[dotnet test - Run selective unit tests](https://learn.microsoft.com/en-us/dotnet/core/testing/selective-unit-tests?pivots=mstest#syntax)
for the full syntax.