# General Test Infrastructure ## Test "Kind" * Build Only * Builds an executable. * Will not execute. * e.g. `BuildOnly` * Run Only * Can use output of `BuildOnly` or `BuildAndRun` projects with different command line arguments. * e.g. `RunOnly` * Build And Run * Builds an executable. * Will execute said executable. * e.g. `BuildAndRun` * Shared Libraries * For building libraries common to zero or more tests. * e.g. `SharedLibrary` By default (i.e. if not specified explicitly), test "Kind" is `BuildAndRun`. ## Priority Test cases are categorized by priority level. The most important subset should be and is the smallest subset. This subset is called priority 0. * By default, a test case is priority 0. Tests must be explicitly de-prioritized. * Set the priority of a test by setting the property `` in the test's project file. * e.g. `2` * Lower priority values are always run in conjunction when running higher priority value tests. * i.e. if a developer elects to do a priority 2 test run, then all priority 0, 1 and 2 tests are run. ## Adding Test Guidelines * All test source files should include the following banner: ``` // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. ``` * Disable building of a test by conditionally setting the `` property. * e.g. `true` * Exclude test from GCStress runs by adding the following to the csproj: * `true` * Exclude test from JIT stress runs runs by adding the following to the csproj: * `true` * Add NuGet/MyGet references by updating the following [test project](https://github.com/dotnet/coreclr/blob/master/tests/src/Common/test_dependencies/test_dependencies.csproj). * Build against the `mscorlib` facade by adding `true` to the test project. * Update relevent exclusion lists: There are currently three different exclude lists. Tests.lst is currently only used by CI. - `tests/issues.targets` - `tests/arm/Tests.lst` - Used by Windows arm32 testing - `tests/arm64/Tests.lst` - Used by Windows arm64 testing ### Creating a C# test project 1. Use an existing test such as `\tests\src\Exceptions\Finalization\Finalizer.csproj` as a template and copy it to a new folder under `\tests\src`. 1. Be sure that the `` property has been removed * Not removing this can cause confusion with the way tests are generally handled behind the scenes by the build system. 1. Set the ``/`` properties. 1. Add source files to the new project. 1. Indicate the success of the test by returning `100`. Failure can be indicated by any non-`100` value. Example: ``` static public int Main(string[] notUsed) { try { // Test scenario here } catch (Exception e) { Console.WriteLine($"Test Failure: {e.Message}"); return 101; } return 100; } ``` 1. Add any other projects as a dependency, if needed. * Managed reference: `` * Native reference: `` 1. Build the test. 1. Follow the steps to re-run a failed test to validate the new test.