namespace XFEExtension.NetCore.XUnit.Runtime; /// /// 定义普通测试运行完成后的自定义报告扩展。 /// public interface ITestReporter { /// /// 将测试运行摘要写入自定义目标。 /// /// 包含全部测试用例结果的运行摘要。 /// 运行器配置的报告产物目录。 /// 用于取消报告写入的令牌。 /// 表示异步报告操作的值任务。 ValueTask ReportAsync(TestRunSummary summary, string artifactsPath, CancellationToken cancellationToken = default); } /// /// 定义基准运行完成后的自定义结果导出扩展。 /// public interface IBenchmarkExporter { /// /// 将基准运行摘要导出到自定义格式或目标。 /// /// 包含统计数据和原始样本的基准运行摘要。 /// 运行器配置的报告产物目录。 /// 用于取消导出的令牌。 /// 表示异步导出操作的值任务。 ValueTask ExportAsync(BenchmarkRunSummary summary, string artifactsPath, CancellationToken cancellationToken = default); } /// /// 定义可由 成员返回的自定义测试数据源。 /// public interface ITestCaseDataSource { /// /// 获取测试方法的参数行。 /// /// 参数数组序列;每个数组表示一个独立测试用例。 IEnumerable GetData(); } /// /// 定义测试类、Fixture 和基准类的自定义创建与释放策略。 /// public interface ITestActivator { /// /// 尝试创建指定类型的实例。 /// /// 运行器需要创建的类型。 /// 创建的实例;返回 时运行器使用内置构造逻辑。 object? CreateInstance(Type type); /// /// 释放运行器使用过的实例。 /// /// 要释放的实例;静态测试可能传入 。 /// 表示异步释放操作的值任务。 ValueTask DisposeAsync(object? instance); } /// /// 声明测试类需要一个在其执行范围内共享的类 Fixture。 /// /// 要创建并注入测试类构造函数的 Fixture 类型。 public interface IClassFixture where TFixture : class; /// /// 声明测试集合需要一个在集合执行范围内共享的 Fixture。 /// /// 要在测试集合内共享的 Fixture 类型。 public interface ICollectionFixture where TFixture : class; /// /// 使用无参构造函数创建对象,并按照异步优先顺序释放对象的默认激活器。 /// public sealed class DefaultTestActivator : ITestActivator { /// /// 使用公共无参构造函数创建指定类型。 /// /// 要创建的类型。 /// 创建的实例。 /// 类型没有可用的公共无参构造函数。 public object? CreateInstance(Type type) => Activator.CreateInstance(type); /// /// 优先调用 ,否则调用 。 /// /// 要释放的实例。 /// 表示释放操作的值任务。 public async ValueTask DisposeAsync(object? instance) { if (instance is IAsyncDisposable asyncDisposable) await asyncDisposable.DisposeAsync().ConfigureAwait(false); else if (instance is IDisposable disposable) disposable.Dispose(); } }