Advanced Sailfish
Example app setup
MyApp.CLI (a project)
PerformanceTests.csproj
<ProjectReference Include="..\MyApp.PerformanceTests\PerformanceTests.csproj" />
// .net6 program.cs
var SourceTypesProvider = new Type[] { RegistrationProvider };var RegistrationProviderTypesProvider = new Type[] { RegistrationProvider };
var sailfishRunResult = await SailfishRunner.Run( AssembleRunRequest( args, SourceTypesProvider, RegistrationProviderTypesProvider), cancellationToken);var not = sailfishRunResult.IsValid ? string.Empty : "not ";Console.WriteLine($"Test run was {not}valid");
RunSettings AssembleRunRequest(args){ return new RunSettings(...);}
public class RegistrationProvider : IProvideARegistrationCallback{ public async Task RegisterAsync(ContainerBuilder builder, CancellationToken ct) { var typeInstance = await MyClientFactory.Create(ct); builder.RegisterType(typeInstance).As<IClient>(); }}
MyApp.PerformanceTests (a project)
PerformanceTests.csproj
<PackageReference Include="Sailfish.TestAdapter" Version={Latest} />
// this will be picked up by Sailfish's dependency scannerpublic class RegistrationProvider : IProvideARegistrationCallback{ public async Task RegisterAsync(ContainerBuilder builder, CancellationToken ct) { var typeInstance = await MyClientFactory.Create(ct); builder.RegisterType(typeInstance).As<IClient>(); }}
// this is runnable via the IDE[Sailfish]public class AMostBasicTest{ private readonly IClient myClient;
public AMostBasicTest(IClient myClient) { this.myClient = myClient; }
[SailfishMethod] public async Task TestMethod(CancellationToken cancellationToken) { await myClient.Get("/api", cancellationToken); }}
This design allows you to execute tests from the console app, as well as the IDE.