Xunit.Extensions.Ordering
1.4.5
dotnet add package Xunit.Extensions.Ordering --version 1.4.5
NuGet\Install-Package Xunit.Extensions.Ordering -Version 1.4.5
<PackageReference Include="Xunit.Extensions.Ordering" Version="1.4.5" />
<PackageVersion Include="Xunit.Extensions.Ordering" Version="1.4.5" />
<PackageReference Include="Xunit.Extensions.Ordering" />
paket add Xunit.Extensions.Ordering --version 1.4.5
#r "nuget: Xunit.Extensions.Ordering, 1.4.5"
#:package Xunit.Extensions.Ordering@1.4.5
#addin nuget:?package=Xunit.Extensions.Ordering&version=1.4.5
#tool nuget:?package=Xunit.Extensions.Ordering&version=1.4.5
Xunit.Extensions.Ordering
Xunit extension that provides full support for ordering at all levels - test collections, test classes and test cases. Integration testing is the common scenario where ordering is useful.
Extension also provides full-featured AssemblyFixture implementation with same functionality as class and collection fixtures (including IMessageSink injection, support for IAsyncLifetime).
Supports: .NET Core 1.x, .NET Core 2.x. and .NET 4.5.2+
Nuget: https://www.nuget.org/packages/Xunit.Extensions.Ordering/
Table of contents
Test cases ordering
Setup ordering
Add AssemblyInfo.cs with only following lines of code
using Xunit;
//Optional
[assembly: CollectionBehavior(DisableTestParallelization = true)]
//Optional
[assembly: TestCaseOrderer("Xunit.Extensions.Ordering.TestCaseOrderer", "Xunit.Extensions.Ordering")]
//Optional
[assembly: TestCollectionOrderer("Xunit.Extensions.Ordering.CollectionOrderer", "Xunit.Extensions.Ordering")]
Ordering classes and cases
Add Order attribute to test classes and methods. Tests are executed in ascending order. If no Order attribute is specified default 0 is assigned. Multiple Order attributes can have same value. Their execution order is in this case deterministic but unpredictible.
[Order(1)]
public class TC2
{
[Fact, Order(2)]
public void M1() { /*...*/ }
[Fact, Order(3)]
public void M2() { /*...*/ }
[Fact, Order(1)]
public void M3() { /*...*/ }
}
Ordering classes in collection
You can order test classes in collections by adding Order attribute but you have to use patched test framework by adding following lines to AssemblyInfo.cs
using Xunit;
[assembly: TestFramework("Xunit.Extensions.Ordering.TestFramework", "Xunit.Extensions.Ordering")]
[CollectionDefinition("C1")]
public class Collection1 { }
[Collection("C1"), Order(2)]
public class TC3
{
[Fact, Order(1)]
public void M1() { /* 3 */ }
[Fact, Order(2)]
public void M2() { /* 4 */ }
}
[Collection("C1"), Order(1)]
public partial class TC5
{
[Fact, Order(2)]
public void M1() { /* 2 */ }
[Fact, Order(1)]
public void M2() { /* 1 */ }
}
Ordering collections
You can order test collections by adding Order attribute to definition collection class
[CollectionDefinition("C1"), Order(3)]
public class Collection3 { }
[CollectionDefinition("C2"), Order(1)]
public class Collection3 { }
Mixing test classes with and without explicit collection assignement
Test classes without explicitely assigned collection are collections implicitely in Xunit (collection per class).
If you mix both types of collections they are on the same level and Order is applied following this logic.
[CollectionDefinition("C1"), Order(3)]
public class Collection3 { }
[CollectionDefinition("C2"), Order(1)]
public class Collection3 { }
[Order(2)]
public class TC2
{
[Fact]
public void M1() { /* 4 */ }
}
[Collection("C1")]
public class TC3
{
[Fact]
public void M1() { /* 5 */ }
}
[Collection("C2"), Order(2)]
public partial class TC5
{
[Fact]
public void M1() { /* 3 */ }
}
[Collection("C2"), Order(1)]
public partial class TC5
{
[Fact, Order(2)]
public void M1() { /* 2 */ }
[Fact, Order(1)]
public void M2() { /* 1 */ }
}
Checking continuity and duplicates
You can enable warning messages about continuity and duplicate order indexes.
- Create
xnuit.runner.jsonfile in root of your test project
{
"$schema": "https://xunit.github.io/schema/current/xunit.runner.schema.json",
"diagnosticMessages": true
}