{"id":14921965,"url":"https://github.com/thomhurst/TUnit","last_synced_at":"2025-09-23T14:32:38.169Z","repository":{"id":223208851,"uuid":"747691207","full_name":"thomhurst/TUnit","owner":"thomhurst","description":"A modern, fast and flexible .NET testing framework ","archived":false,"fork":false,"pushed_at":"2024-10-29T09:32:48.000Z","size":7650,"stargazers_count":2173,"open_issues_count":11,"forks_count":37,"subscribers_count":13,"default_branch":"main","last_synced_at":"2024-10-29T09:55:11.622Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thomhurst.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["thomhurst"]}},"created_at":"2024-01-24T13:00:36.000Z","updated_at":"2024-10-29T09:46:39.000Z","dependencies_parsed_at":"2024-04-14T19:29:55.558Z","dependency_job_id":"d39633ca-5818-44bc-ac06-01945563d2c2","html_url":"https://github.com/thomhurst/TUnit","commit_stats":null,"previous_names":["thomhurst/tunit"],"tags_count":26,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thomhurst%2FTUnit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thomhurst%2FTUnit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thomhurst%2FTUnit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thomhurst%2FTUnit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thomhurst","download_url":"https://codeload.github.com/thomhurst/TUnit/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":233982454,"owners_count":18760966,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-09-23T04:00:31.984Z","updated_at":"2025-09-23T14:32:38.159Z","avatar_url":"https://github.com/thomhurst.png","language":"C#","funding_links":["https://github.com/sponsors/thomhurst"],"categories":["Testing and Mocking"],"sub_categories":[],"readme":"![](assets/banner.png)\n\n# 🚀 The Modern Testing Framework for .NET\n\n**TUnit** is a next-generation testing framework for C# that outpaces traditional frameworks with **source-generated tests**, **parallel execution by default**, and **Native AOT support**. Built on the modern Microsoft.Testing.Platform, TUnit delivers faster test runs, better developer experience, and unmatched flexibility.\n\n\u003cdiv align=\"center\"\u003e\n\n[![thomhurst%2FTUnit | Trendshift](https://trendshift.io/api/badge/repositories/11781)](https://trendshift.io/repositories/11781)\n\n\n[![Codacy Badge](https://api.codacy.com/project/badge/Grade/a8231644d844435eb9fd15110ea771d8)](https://app.codacy.com/gh/thomhurst/TUnit?utm_source=github.com\u0026utm_medium=referral\u0026utm_content=thomhurst/TUnit\u0026utm_campaign=Badge_Grade)![GitHub Repo stars](https://img.shields.io/github/stars/thomhurst/TUnit) ![GitHub Issues or Pull Requests](https://img.shields.io/github/issues-closed-raw/thomhurst/TUnit)\n [![GitHub Sponsors](https://img.shields.io/github/sponsors/thomhurst)](https://github.com/sponsors/thomhurst) [![nuget](https://img.shields.io/nuget/v/TUnit.svg)](https://www.nuget.org/packages/TUnit/) [![NuGet Downloads](https://img.shields.io/nuget/dt/TUnit)](https://www.nuget.org/packages/TUnit/) ![GitHub Workflow Status (with event)](https://img.shields.io/github/actions/workflow/status/thomhurst/TUnit/dotnet.yml) ![GitHub last commit (branch)](https://img.shields.io/github/last-commit/thomhurst/TUnit/main) ![License](https://img.shields.io/github/license/thomhurst/TUnit)\n\n\u003c/div\u003e\n\n## ⚡ Why Choose TUnit?\n\n| Feature | Traditional Frameworks | **TUnit** |\n|---------|----------------------|-----------|\n| Test Discovery | ❌ Runtime reflection | ✅ **Compile-time generation** |\n| Execution Speed | ❌ Sequential by default | ✅ **Parallel by default** |\n| Modern .NET | ⚠️ Limited AOT support | ✅ **Full Native AOT \u0026 trimming** |\n| Test Dependencies | ❌ Not supported | ✅ **`[DependsOn]` chains** |\n| Resource Management | ❌ Manual lifecycle | ✅ **Intelligent cleanup** |\n\n⚡ **Parallel by Default** - Tests run concurrently with intelligent dependency management\n\n🎯 **Compile-Time Discovery** - Know your test structure before runtime\n\n🔧 **Modern .NET Ready** - Native AOT, trimming, and latest .NET features\n\n🎭 **Extensible** - Customize data sources, attributes, and test behavior\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n## 📚 **[Complete Documentation \u0026 Learning Center](https://tunit.dev)**\n\n**🚀 New to TUnit?** Start with our **[Getting Started Guide](https://tunit.dev/docs/getting-started/installation)**\n\n**🔄 Migrating?** See our **[Migration Guides](https://tunit.dev/docs/migration/xunit)**\n\n**🎯 Advanced Features?** Explore **[Data-Driven Testing](https://tunit.dev/docs/test-authoring/arguments)**, **[Test Dependencies](https://tunit.dev/docs/test-authoring/depends-on)**, and **[Parallelism Control](https://tunit.dev/docs/parallelism/not-in-parallel)**\n\n\u003c/div\u003e\n\n---\n\n## 🏁 Quick Start\n\n### Using the Project Template (Recommended)\n```bash\ndotnet new install TUnit.Templates\ndotnet new TUnit -n \"MyTestProject\"\n```\n\n### Manual Installation\n```bash\ndotnet add package TUnit --prerelease\n```\n\n📖 **[📚 Complete Documentation \u0026 Guides](https://tunit.dev)** - Everything you need to master TUnit\n\n## ✨ Key Features\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd width=\"50%\"\u003e\n\n**🚀 Performance \u0026 Modern Platform**\n- 🔥 Source-generated tests (no reflection)\n- ⚡ Parallel execution by default\n- 🚀 Native AOT \u0026 trimming support\n- 📈 Optimized for performance\n\n\u003c/td\u003e\n\u003ctd width=\"50%\"\u003e\n\n**🎯 Advanced Test Control**\n- 🔗 Test dependencies with `[DependsOn]`\n- 🎛️ Parallel limits \u0026 custom scheduling\n- 🛡️ Built-in analyzers \u0026 compile-time checks\n- 🎭 Custom attributes \u0026 extensible conditions\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\n**📊 Rich Data \u0026 Assertions**\n- 📋 Multiple data sources (`[Arguments]`, `[Matrix]`, `[ClassData]`)\n- ✅ Fluent async assertions\n- 🔄 Smart retry logic \u0026 conditional execution\n- 📝 Rich test metadata \u0026 context\n\n\u003c/td\u003e\n\u003ctd\u003e\n\n**🔧 Developer Experience**\n- 💉 Full dependency injection support\n- 🪝 Comprehensive lifecycle hooks\n- 🎯 IDE integration (VS, Rider, VS Code)\n- 📚 Extensive documentation \u0026 examples\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n## 📝 Simple Test Example\n\n```csharp\n[Test]\npublic async Task User_Creation_Should_Set_Timestamp()\n{\n    // Arrange\n    var userService = new UserService();\n\n    // Act\n    var user = await userService.CreateUserAsync(\"john.doe@example.com\");\n\n    // Assert - TUnit's fluent assertions\n    await Assert.That(user.CreatedAt)\n        .IsEqualTo(DateTime.Now)\n        .Within(TimeSpan.FromMinutes(1));\n\n    await Assert.That(user.Email)\n        .IsEqualTo(\"john.doe@example.com\");\n}\n```\n\n## 🎯 Data-Driven Testing\n\n```csharp\n[Test]\n[Arguments(\"user1@test.com\", \"ValidPassword123\")]\n[Arguments(\"user2@test.com\", \"AnotherPassword456\")]\n[Arguments(\"admin@test.com\", \"AdminPass789\")]\npublic async Task User_Login_Should_Succeed(string email, string password)\n{\n    var result = await authService.LoginAsync(email, password);\n    await Assert.That(result.IsSuccess).IsTrue();\n}\n\n// Matrix testing - tests all combinations\n[Test]\n[MatrixDataSource]\npublic async Task Database_Operations_Work(\n    [Matrix(\"Create\", \"Update\", \"Delete\")] string operation,\n    [Matrix(\"User\", \"Product\", \"Order\")] string entity)\n{\n    await Assert.That(await ExecuteOperation(operation, entity))\n        .IsTrue();\n}\n```\n\n## 🔗 Advanced Test Orchestration\n\n```csharp\n[Before(Class)]\npublic static async Task SetupDatabase(ClassHookContext context)\n{\n    await DatabaseHelper.InitializeAsync();\n}\n\n[Test, DisplayName(\"Register a new account\")]\n[MethodDataSource(nameof(GetTestUsers))]\npublic async Task Register_User(string username, string password)\n{\n    // Test implementation\n}\n\n[Test, DependsOn(nameof(Register_User))]\n[Retry(3)] // Retry on failure\npublic async Task Login_With_Registered_User(string username, string password)\n{\n    // This test runs after Register_User completes\n}\n\n[Test]\n[ParallelLimit\u003cLoadTestParallelLimit\u003e] // Custom parallel control\n[Repeat(100)] // Run 100 times\npublic async Task Load_Test_Homepage()\n{\n    // Performance testing\n}\n\n// Custom attributes\n[Test, WindowsOnly, RetryOnHttpError(5)]\npublic async Task Windows_Specific_Feature()\n{\n    // Platform-specific test with custom retry logic\n}\n\npublic class LoadTestParallelLimit : IParallelLimit\n{\n    public int Limit =\u003e 10; // Limit to 10 concurrent executions\n}\n```\n\n## 🔧 Smart Test Control\n\n```csharp\n// Custom conditional execution\npublic class WindowsOnlyAttribute : SkipAttribute\n{\n    public WindowsOnlyAttribute() : base(\"Windows only test\") { }\n\n    public override Task\u003cbool\u003e ShouldSkip(TestContext testContext)\n        =\u003e Task.FromResult(!OperatingSystem.IsWindows());\n}\n\n// Custom retry logic\npublic class RetryOnHttpErrorAttribute : RetryAttribute\n{\n    public RetryOnHttpErrorAttribute(int times) : base(times) { }\n\n    public override Task\u003cbool\u003e ShouldRetry(TestInformation testInformation,\n        Exception exception, int currentRetryCount)\n        =\u003e Task.FromResult(exception is HttpRequestException { StatusCode: HttpStatusCode.ServiceUnavailable });\n}\n```\n\n## 🎯 Perfect For Every Testing Scenario\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd width=\"33%\"\u003e\n\n### 🧪 **Unit Testing**\n```csharp\n[Test]\n[Arguments(1, 2, 3)]\n[Arguments(5, 10, 15)]\npublic async Task Calculate_Sum(int a, int b, int expected)\n{\n    await Assert.That(Calculator.Add(a, b))\n        .IsEqualTo(expected);\n}\n```\n**Fast, isolated, and reliable**\n\n\u003c/td\u003e\n\u003ctd width=\"33%\"\u003e\n\n### 🔗 **Integration Testing**\n```csharp\n[Test, DependsOn(nameof(CreateUser))]\npublic async Task Login_After_Registration()\n{\n    // Runs after CreateUser completes\n    var result = await authService.Login(user);\n    await Assert.That(result.IsSuccess).IsTrue();\n}\n```\n**Stateful workflows made simple**\n\n\u003c/td\u003e\n\u003ctd width=\"33%\"\u003e\n\n### ⚡ **Load Testing**\n```csharp\n[Test]\n[ParallelLimit\u003cLoadTestLimit\u003e]\n[Repeat(1000)]\npublic async Task API_Handles_Concurrent_Requests()\n{\n    await Assert.That(await httpClient.GetAsync(\"/api/health\"))\n        .HasStatusCode(HttpStatusCode.OK);\n}\n```\n**Built-in performance testing**\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n## 🚀 What Makes TUnit Different?\n\n### **Compile-Time Intelligence**\nTests are discovered at build time, not runtime - enabling faster discovery, better IDE integration, and precise resource lifecycle management.\n\n### **Parallel-First Architecture**\nBuilt for concurrency from day one with `[DependsOn]` for test chains, `[ParallelLimit]` for resource control, and intelligent scheduling.\n\n### **Extensible by Design**\nThe `DataSourceGenerator\u003cT\u003e` pattern and custom attribute system let you extend TUnit's capabilities without modifying core framework code.\n\n## 🏆 Community \u0026 Ecosystem\n\n\u003cdiv align=\"center\"\u003e\n\n**🌟 Join thousands of developers modernizing their testing**\n\n[![Downloads](https://img.shields.io/nuget/dt/TUnit?label=Downloads\u0026color=blue)](https://www.nuget.org/packages/TUnit/)\n[![Contributors](https://img.shields.io/github/contributors/thomhurst/TUnit?label=Contributors)](https://github.com/thomhurst/TUnit/graphs/contributors)\n[![Discussions](https://img.shields.io/github/discussions/thomhurst/TUnit?label=Discussions)](https://github.com/thomhurst/TUnit/discussions)\n\n\u003c/div\u003e\n\n### 🤝 **Active Community**\n- 📚 **[Official Documentation](https://tunit.dev)** - Comprehensive guides, tutorials, and API reference\n- 💬 **[GitHub Discussions](https://github.com/thomhurst/TUnit/discussions)** - Get help and share ideas\n- 🐛 **[Issue Tracking](https://github.com/thomhurst/TUnit/issues)** - Report bugs and request features\n- 📢 **[Release Notes](https://github.com/thomhurst/TUnit/releases)** - Stay updated with latest improvements\n\n## 🛠️ IDE Support\n\nTUnit works seamlessly across all major .NET development environments:\n\n### Visual Studio (2022 17.13+)\n✅ **Fully supported** - No additional configuration needed for latest versions\n\n⚙️ **Earlier versions**: Enable \"Use testing platform server mode\" in Tools \u003e Manage Preview Features\n\n### JetBrains Rider\n✅ **Fully supported**\n\n⚙️ **Setup**: Enable \"Testing Platform support\" in Settings \u003e Build, Execution, Deployment \u003e Unit Testing \u003e VSTest\n\n### Visual Studio Code\n✅ **Fully supported**\n\n⚙️ **Setup**: Install [C# Dev Kit](https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csdevkit) and enable \"Use Testing Platform Protocol\"\n\n### Command Line\n✅ **Full CLI support** - Works with `dotnet test`, `dotnet run`, and direct executable execution\n\n## 📦 Package Options\n\n| Package | Use Case |\n|---------|----------|\n| **`TUnit`** | ⭐ **Start here** - Complete testing framework (includes Core + Engine + Assertions) |\n| **`TUnit.Core`** | 📚 Test libraries and shared components (no execution engine) |\n| **`TUnit.Engine`** | 🚀 Test execution engine and adapter (for test projects) |\n| **`TUnit.Assertions`** | ✅ Standalone assertions (works with any test framework) |\n| **`TUnit.Playwright`** | 🎭 Playwright integration with automatic lifecycle management |\n\n## 🎯 Migration from Other Frameworks\n\n**Coming from NUnit or xUnit?** TUnit maintains familiar syntax while adding modern capabilities:\n\n```csharp\n// Enhanced with TUnit's advanced features\n[Test]\n[Arguments(\"value1\")]\n[Arguments(\"value2\")]\n[Retry(3)]\n[ParallelLimit\u003cCustomLimit\u003e]\npublic async Task Modern_TUnit_Test(string value) { }\n```\n\n📖 **Need help migrating?** Check our detailed **[Migration Guides](https://tunit.dev/docs/migration/xunit)** with step-by-step instructions for xUnit, NUnit, and MSTest.\n\n\n## 💡 Current Status\n\nThe API is mostly stable, but may have some changes based on feedback or issues before v1.0 release.\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n## 🚀 Ready to Experience the Future of .NET Testing?\n\n### ⚡ **Start in 30 Seconds**\n\n```bash\n# Create a new test project with examples\ndotnet new install TUnit.Templates \u0026\u0026 dotnet new TUnit -n \"MyAwesomeTests\"\n\n# Or add to existing project\ndotnet add package TUnit --prerelease\n```\n\n### 🎯 **Why Wait? Join the Movement**\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\" width=\"25%\"\u003e\n\n### 📈 **Performance**\n**Optimized execution**\n**Parallel by default**\n**Zero reflection overhead**\n\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"25%\"\u003e\n\n### 🔮 **Future-Ready**\n**Native AOT support**\n**Latest .NET features**\n**Source generation**\n\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"25%\"\u003e\n\n### 🛠️ **Developer Experience**\n**Compile-time checks**\n**Rich IDE integration**\n**Intelligent debugging**\n\n\u003c/td\u003e\n\u003ctd align=\"center\" width=\"25%\"\u003e\n\n### 🎭 **Flexibility**\n**Test dependencies**\n**Custom attributes**\n**Extensible architecture**\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n---\n\n**📖 Learn More**: [tunit.dev](https://tunit.dev) | **💬 Get Help**: [GitHub Discussions](https://github.com/thomhurst/TUnit/discussions) | **⭐ Show Support**: [Star on GitHub](https://github.com/thomhurst/TUnit)\n\n*TUnit is actively developed and production-ready. Join our growing community of developers who've made the switch!*\n\n\u003c/div\u003e\n\n## Performance Benchmark\n\n### Scenario: Building the test project\n\n#### macos-latest\n\n```\n\nBenchmarkDotNet v0.15.3, macOS Sequoia 15.6.1 (24G90) [Darwin 24.6.0]\nApple M1 (Virtual), 1 CPU, 3 logical and 3 physical cores\n.NET SDK 9.0.305\n  [Host]     : .NET 9.0.9 (9.0.9, 9.0.925.41916), Arm64 RyuJIT armv8.0-a\n  Job-YNJDZW : .NET 9.0.9 (9.0.9, 9.0.925.41916), Arm64 RyuJIT armv8.0-a\n\nRuntime=.NET 9.0  \n\n```\n| Method       | Version | Mean    | Error    | StdDev   | Median  |\n|------------- |-------- |--------:|---------:|---------:|--------:|\n| Build_TUnit  | 0.61.13 | 1.918 s | 0.1560 s | 0.4550 s | 1.812 s |\n| Build_NUnit  | 4.4.0   | 1.625 s | 0.1525 s | 0.4497 s | 1.522 s |\n| Build_xUnit  | 2.9.3   | 1.268 s | 0.1006 s | 0.2952 s | 1.196 s |\n| Build_MSTest | 3.10.4  | 1.532 s | 0.1190 s | 0.3452 s | 1.497 s |\n\n\n\n#### ubuntu-latest\n\n```\n\nBenchmarkDotNet v0.15.3, Linux Ubuntu 24.04.3 LTS (Noble Numbat)\nAMD EPYC 7763 2.45GHz, 1 CPU, 4 logical and 2 physical cores\n.NET SDK 9.0.305\n  [Host]     : .NET 9.0.9 (9.0.9, 9.0.925.41916), X64 RyuJIT x86-64-v3\n  Job-YNJDZW : .NET 9.0.9 (9.0.9, 9.0.925.41916), X64 RyuJIT x86-64-v3\n\nRuntime=.NET 9.0  \n\n```\n| Method       | Version | Mean    | Error    | StdDev   | Median  |\n|------------- |-------- |--------:|---------:|---------:|--------:|\n| Build_TUnit  | 0.61.13 | 1.836 s | 0.0367 s | 0.0408 s | 1.830 s |\n| Build_NUnit  | 4.4.0   | 1.509 s | 0.0134 s | 0.0125 s | 1.511 s |\n| Build_xUnit  | 2.9.3   | 1.526 s | 0.0123 s | 0.0115 s | 1.527 s |\n| Build_MSTest | 3.10.4  | 1.521 s | 0.0188 s | 0.0176 s | 1.523 s |\n\n\n\n#### windows-latest\n\n```\n\nBenchmarkDotNet v0.15.3, Windows 11 (10.0.26100.4946/24H2/2024Update/HudsonValley) (Hyper-V)\nAMD EPYC 7763 2.44GHz, 1 CPU, 4 logical and 2 physical cores\n.NET SDK 9.0.305\n  [Host]     : .NET 9.0.9 (9.0.9, 9.0.925.41916), X64 RyuJIT x86-64-v3\n  Job-YNJDZW : .NET 9.0.9 (9.0.9, 9.0.925.41916), X64 RyuJIT x86-64-v3\n\nRuntime=.NET 9.0  \n\n```\n| Method       | Version | Mean    | Error    | StdDev   | Median  |\n|------------- |-------- |--------:|---------:|---------:|--------:|\n| Build_TUnit  | 0.61.13 | 1.973 s | 0.0382 s | 0.0454 s | 1.967 s |\n| Build_NUnit  | 4.4.0   | 1.674 s | 0.0181 s | 0.0160 s | 1.674 s |\n| Build_xUnit  | 2.9.3   | 1.671 s | 0.0264 s | 0.0247 s | 1.679 s |\n| Build_MSTest | 3.10.4  | 1.682 s | 0.0266 s | 0.0236 s | 1.691 s |\n\n\n### Scenario: Tests focused on assertion performance and validation\n\n#### macos-latest\n\n```\n\nBenchmarkDotNet v0.15.3, macOS Sequoia 15.6.1 (24G90) [Darwin 24.6.0]\nApple M1 (Virtual), 1 CPU, 3 logical and 3 physical cores\n.NET SDK 9.0.305\n  [Host]     : .NET 9.0.9 (9.0.9, 9.0.925.41916), Arm64 RyuJIT armv8.0-a\n  Job-YNJDZW : .NET 9.0.9 (9.0.9, 9.0.925.41916), Arm64 RyuJIT armv8.0-a\n\nRuntime=.NET 9.0  \n\n```\n| Method    | Version | Mean       | Error    | StdDev    | Median     |\n|---------- |-------- |-----------:|---------:|----------:|-----------:|\n| TUnit_AOT | 0.61.13 |   110.9 ms |  2.11 ms |   5.44 ms |   108.9 ms |\n| TUnit     | 0.61.13 |   739.7 ms | 54.94 ms | 160.26 ms |   705.9 ms |\n| NUnit     | 4.4.0   |         NA |       NA |        NA |         NA |\n| xUnit     | 2.9.3   | 1,060.2 ms | 56.19 ms | 165.67 ms | 1,044.3 ms |\n| MSTest    | 3.10.4  |   983.8 ms | 60.84 ms | 179.40 ms |   953.0 ms |\n\nBenchmarks with issues:\n  RuntimeBenchmarks.NUnit: Job-YNJDZW(Runtime=.NET 9.0)\n\n\n\n#### ubuntu-latest\n\n```\n\nBenchmarkDotNet v0.15.3, Linux Ubuntu 24.04.3 LTS (Noble Numbat)\nAMD EPYC 7763 2.45GHz, 1 CPU, 4 logical and 2 physical cores\n.NET SDK 9.0.305\n  [Host]     : .NET 9.0.9 (9.0.9, 9.0.925.41916), X64 RyuJIT x86-64-v3\n  Job-YNJDZW : .NET 9.0.9 (9.0.9, 9.0.925.41916), X64 RyuJIT x86-64-v3\n\nRuntime=.NET 9.0  \n\n```\n| Method    | Version | Mean        | Error     | StdDev    | Median      |\n|---------- |-------- |------------:|----------:|----------:|------------:|\n| TUnit_AOT | 0.61.13 |    28.40 ms |  0.531 ms |  0.497 ms |    28.43 ms |\n| TUnit     | 0.61.13 |   972.30 ms | 19.263 ms | 20.611 ms |   969.97 ms |\n| NUnit     | 4.4.0   |          NA |        NA |        NA |          NA |\n| xUnit     | 2.9.3   | 1,413.87 ms | 15.619 ms | 14.610 ms | 1,409.06 ms |\n| MSTest    | 3.10.4  | 1,284.40 ms | 16.824 ms | 14.914 ms | 1,285.14 ms |\n\nBenchmarks with issues:\n  RuntimeBenchmarks.NUnit: Job-YNJDZW(Runtime=.NET 9.0)\n\n\n\n#### windows-latest\n\n```\n\nBenchmarkDotNet v0.15.3, Windows 11 (10.0.26100.4946/24H2/2024Update/HudsonValley) (Hyper-V)\nAMD EPYC 7763 2.44GHz, 1 CPU, 4 logical and 2 physical cores\n.NET SDK 9.0.305\n  [Host]     : .NET 9.0.9 (9.0.9, 9.0.925.41916), X64 RyuJIT x86-64-v3\n  Job-YNJDZW : .NET 9.0.9 (9.0.9, 9.0.925.41916), X64 RyuJIT x86-64-v3\n\nRuntime=.NET 9.0  \n\n```\n| Method    | Version | Mean        | Error     | StdDev    | Median      |\n|---------- |-------- |------------:|----------:|----------:|------------:|\n| TUnit_AOT | 0.61.13 |    64.52 ms |  1.452 ms |  4.189 ms |    63.69 ms |\n| TUnit     | 0.61.13 | 1,140.79 ms | 22.787 ms | 44.979 ms | 1,136.18 ms |\n| NUnit     | 4.4.0   |          NA |        NA |        NA |          NA |\n| xUnit     | 2.9.3   | 1,562.14 ms | 19.368 ms | 17.170 ms | 1,558.80 ms |\n| MSTest    | 3.10.4  | 1,453.56 ms | 29.005 ms | 27.131 ms | 1,444.95 ms |\n\nBenchmarks with issues:\n  RuntimeBenchmarks.NUnit: Job-YNJDZW(Runtime=.NET 9.0)\n\n\n### Scenario: Tests running asynchronous operations and async/await patterns\n\n#### macos-latest\n\n```\n\nBenchmarkDotNet v0.15.3, macOS Sequoia 15.6.1 (24G90) [Darwin 24.6.0]\nApple M1 (Virtual), 1 CPU, 3 logical and 3 physical cores\n.NET SDK 9.0.305\n  [Host]     : .NET 9.0.9 (9.0.9, 9.0.925.41916), Arm64 RyuJIT armv8.0-a\n  Job-YNJDZW : .NET 9.0.9 (9.0.9, 9.0.925.41916), Arm64 RyuJIT armv8.0-a\n\nRuntime=.NET 9.0  \n\n```\n| Method    | Version | Mean       | Error     | StdDev    | Median     |\n|---------- |-------- |-----------:|----------:|----------:|-----------:|\n| TUnit_AOT | 0.61.13 |   162.1 ms |  13.28 ms |  38.32 ms |   152.6 ms |\n| TUnit     | 0.61.13 |   924.6 ms |  65.33 ms | 189.54 ms |   887.3 ms |\n| NUnit     | 4.4.0   | 1,724.4 ms | 151.93 ms | 447.96 ms | 1,706.2 ms |\n| xUnit     | 2.9.3   | 1,262.2 ms | 100.37 ms | 291.20 ms | 1,180.1 ms |\n| MSTest    | 3.10.4  | 1,003.0 ms |  45.14 ms | 130.24 ms |   972.0 ms |\n\n\n\n#### ubuntu-latest\n\n```\n\nBenchmarkDotNet v0.15.3, Linux Ubuntu 24.04.3 LTS (Noble Numbat)\nAMD EPYC 7763 2.45GHz, 1 CPU, 4 logical and 2 physical cores\n.NET SDK 9.0.305\n  [Host]     : .NET 9.0.9 (9.0.9, 9.0.925.41916), X64 RyuJIT x86-64-v3\n  Job-YNJDZW : .NET 9.0.9 (9.0.9, 9.0.925.41916), X64 RyuJIT x86-64-v3\n\nRuntime=.NET 9.0  \n\n```\n| Method    | Version | Mean        | Error     | StdDev    | Median      |\n|---------- |-------- |------------:|----------:|----------:|------------:|\n| TUnit_AOT | 0.61.13 |    27.23 ms |  0.512 ms |  0.479 ms |    27.19 ms |\n| TUnit     | 0.61.13 |   930.66 ms | 17.773 ms | 21.158 ms |   928.50 ms |\n| NUnit     | 4.4.0   | 1,305.07 ms | 11.768 ms | 11.008 ms | 1,305.56 ms |\n| xUnit     | 2.9.3   | 1,456.88 ms | 22.017 ms | 20.594 ms | 1,452.03 ms |\n| MSTest    | 3.10.4  | 1,283.79 ms | 16.823 ms | 15.736 ms | 1,281.50 ms |\n\n\n\n#### windows-latest\n\n```\n\nBenchmarkDotNet v0.15.3, Windows 11 (10.0.26100.4946/24H2/2024Update/HudsonValley) (Hyper-V)\nAMD EPYC 7763 2.44GHz, 1 CPU, 4 logical and 2 physical cores\n.NET SDK 9.0.305\n  [Host]     : .NET 9.0.9 (9.0.9, 9.0.925.41916), X64 RyuJIT x86-64-v3\n  Job-YNJDZW : .NET 9.0.9 (9.0.9, 9.0.925.41916), X64 RyuJIT x86-64-v3\n\nRuntime=.NET 9.0  \n\n```\n| Method    | Version | Mean        | Error     | StdDev    | Median      |\n|---------- |-------- |------------:|----------:|----------:|------------:|\n| TUnit_AOT | 0.61.13 |    70.22 ms |  1.403 ms |  3.079 ms |    69.96 ms |\n| TUnit     | 0.61.13 | 1,133.62 ms | 25.501 ms | 71.508 ms | 1,119.23 ms |\n| NUnit     | 4.4.0   | 1,605.22 ms | 19.582 ms | 34.296 ms | 1,608.29 ms |\n| xUnit     | 2.9.3   | 1,711.36 ms | 23.829 ms | 22.289 ms | 1,715.93 ms |\n| MSTest    | 3.10.4  | 1,422.68 ms | 27.860 ms | 45.775 ms | 1,403.96 ms |\n\n\n### Scenario: Simple tests with basic operations and assertions\n\n#### macos-latest\n\n```\n\nBenchmarkDotNet v0.15.3, macOS Sequoia 15.6.1 (24G90) [Darwin 24.6.0]\nApple M1 (Virtual), 1 CPU, 3 logical and 3 physical cores\n.NET SDK 9.0.305\n  [Host]     : .NET 9.0.9 (9.0.9, 9.0.925.41916), Arm64 RyuJIT armv8.0-a\n  Job-YNJDZW : .NET 9.0.9 (9.0.9, 9.0.925.41916), Arm64 RyuJIT armv8.0-a\n\nRuntime=.NET 9.0  \n\n```\n| Method    | Version | Mean       | Error     | StdDev    | Median     |\n|---------- |-------- |-----------:|----------:|----------:|-----------:|\n| TUnit_AOT | 0.61.13 |   188.5 ms |  18.39 ms |  54.22 ms |   172.9 ms |\n| TUnit     | 0.61.13 | 1,311.5 ms | 115.60 ms | 337.20 ms | 1,347.2 ms |\n| NUnit     | 4.4.0   | 1,485.0 ms | 102.18 ms | 299.66 ms | 1,472.0 ms |\n| xUnit     | 2.9.3   | 1,203.7 ms | 111.84 ms | 320.89 ms | 1,114.6 ms |\n| MSTest    | 3.10.4  |   924.4 ms |  44.11 ms | 125.12 ms |   927.6 ms |\n\n\n\n#### ubuntu-latest\n\n```\n\nBenchmarkDotNet v0.15.3, Linux Ubuntu 24.04.3 LTS (Noble Numbat)\nAMD EPYC 7763 3.39GHz, 1 CPU, 4 logical and 2 physical cores\n.NET SDK 9.0.305\n  [Host]     : .NET 9.0.9 (9.0.9, 9.0.925.41916), X64 RyuJIT x86-64-v3\n  Job-YNJDZW : .NET 9.0.9 (9.0.9, 9.0.925.41916), X64 RyuJIT x86-64-v3\n\nRuntime=.NET 9.0  \n\n```\n| Method    | Version | Mean        | Error     | StdDev    | Median      |\n|---------- |-------- |------------:|----------:|----------:|------------:|\n| TUnit_AOT | 0.61.13 |    26.66 ms |  0.498 ms |  1.051 ms |    26.68 ms |\n| TUnit     | 0.61.13 |   913.18 ms | 17.930 ms | 21.344 ms |   912.30 ms |\n| NUnit     | 4.4.0   | 1,270.94 ms | 17.391 ms | 16.268 ms | 1,277.04 ms |\n| xUnit     | 2.9.3   | 1,333.17 ms | 14.489 ms | 13.553 ms | 1,333.56 ms |\n| MSTest    | 3.10.4  | 1,214.79 ms | 14.611 ms | 13.668 ms | 1,215.54 ms |\n\n\n\n#### windows-latest\n\n```\n\nBenchmarkDotNet v0.15.3, Windows 11 (10.0.26100.4946/24H2/2024Update/HudsonValley) (Hyper-V)\nAMD EPYC 7763 2.44GHz, 1 CPU, 4 logical and 2 physical cores\n.NET SDK 9.0.305\n  [Host]     : .NET 9.0.9 (9.0.9, 9.0.925.41916), X64 RyuJIT x86-64-v3\n  Job-YNJDZW : .NET 9.0.9 (9.0.9, 9.0.925.41916), X64 RyuJIT x86-64-v3\n\nRuntime=.NET 9.0  \n\n```\n| Method    | Version | Mean        | Error     | StdDev    | Median      |\n|---------- |-------- |------------:|----------:|----------:|------------:|\n| TUnit_AOT | 0.61.13 |    63.84 ms |  1.394 ms |  4.067 ms |    63.36 ms |\n| TUnit     | 0.61.13 | 1,070.82 ms | 20.806 ms | 23.960 ms | 1,062.79 ms |\n| NUnit     | 4.4.0   | 1,451.12 ms | 15.863 ms | 14.838 ms | 1,447.88 ms |\n| xUnit     | 2.9.3   | 1,512.73 ms | 13.653 ms | 11.401 ms | 1,513.74 ms |\n| MSTest    | 3.10.4  | 1,427.97 ms | 24.734 ms | 21.926 ms | 1,430.61 ms |\n\n\n### Scenario: Parameterized tests with multiple test cases using data attributes\n\n#### macos-latest\n\n```\n\nBenchmarkDotNet v0.15.3, macOS Sequoia 15.6.1 (24G90) [Darwin 24.6.0]\nApple M1 (Virtual), 1 CPU, 3 logical and 3 physical cores\n.NET SDK 9.0.305\n  [Host]     : .NET 9.0.9 (9.0.9, 9.0.925.41916), Arm64 RyuJIT armv8.0-a\n  Job-YNJDZW : .NET 9.0.9 (9.0.9, 9.0.925.41916), Arm64 RyuJIT armv8.0-a\n\nRuntime=.NET 9.0  \n\n```\n| Method    | Version | Mean       | Error     | StdDev    | Median     |\n|---------- |-------- |-----------:|----------:|----------:|-----------:|\n| TUnit_AOT | 0.61.13 |   150.6 ms |   9.58 ms |  27.48 ms |   146.4 ms |\n| TUnit     | 0.61.13 | 1,061.2 ms | 107.15 ms | 309.16 ms | 1,004.8 ms |\n| NUnit     | 4.4.0   | 1,392.6 ms | 128.04 ms | 363.23 ms | 1,334.9 ms |\n| xUnit     | 2.9.3   | 1,199.4 ms |  89.43 ms | 263.69 ms | 1,147.9 ms |\n| MSTest    | 3.10.4  |   967.6 ms |  59.53 ms | 168.89 ms |   939.1 ms |\n\n\n\n#### ubuntu-latest\n\n```\n\nBenchmarkDotNet v0.15.3, Linux Ubuntu 24.04.3 LTS (Noble Numbat)\nAMD EPYC 7763 2.87GHz, 1 CPU, 4 logical and 2 physical cores\n.NET SDK 9.0.305\n  [Host]     : .NET 9.0.9 (9.0.9, 9.0.925.41916), X64 RyuJIT x86-64-v3\n  Job-YNJDZW : .NET 9.0.9 (9.0.9, 9.0.925.41916), X64 RyuJIT x86-64-v3\n\nRuntime=.NET 9.0  \n\n```\n| Method    | Version | Mean        | Error     | StdDev    | Median      |\n|---------- |-------- |------------:|----------:|----------:|------------:|\n| TUnit_AOT | 0.61.13 |    27.47 ms |  0.538 ms |  0.899 ms |    27.35 ms |\n| TUnit     | 0.61.13 |   909.47 ms | 17.837 ms | 19.085 ms |   902.41 ms |\n| NUnit     | 4.4.0   | 1,272.36 ms | 10.482 ms |  9.805 ms | 1,274.02 ms |\n| xUnit     | 2.9.3   | 1,342.49 ms |  5.426 ms |  4.810 ms | 1,344.06 ms |\n| MSTest    | 3.10.4  | 1,217.09 ms |  6.172 ms |  5.774 ms | 1,217.55 ms |\n\n\n\n#### windows-latest\n\n```\n\nBenchmarkDotNet v0.15.3, Windows 11 (10.0.26100.4946/24H2/2024Update/HudsonValley) (Hyper-V)\nAMD EPYC 7763 2.44GHz, 1 CPU, 4 logical and 2 physical cores\n.NET SDK 9.0.305\n  [Host]     : .NET 9.0.9 (9.0.9, 9.0.925.41916), X64 RyuJIT x86-64-v3\n  Job-YNJDZW : .NET 9.0.9 (9.0.9, 9.0.925.41916), X64 RyuJIT x86-64-v3\n\nRuntime=.NET 9.0  \n\n```\n| Method    | Version | Mean        | Error     | StdDev     | Median      |\n|---------- |-------- |------------:|----------:|-----------:|------------:|\n| TUnit_AOT | 0.61.13 |    69.27 ms |  1.845 ms |   5.439 ms |    69.29 ms |\n| TUnit     | 0.61.13 | 1,144.21 ms | 22.870 ms |  59.442 ms | 1,129.41 ms |\n| NUnit     | 4.4.0   | 1,596.92 ms | 31.655 ms |  57.883 ms | 1,596.86 ms |\n| xUnit     | 2.9.3   | 1,798.12 ms | 57.406 ms | 164.708 ms | 1,806.71 ms |\n| MSTest    | 3.10.4  | 1,561.06 ms | 23.643 ms |  22.116 ms | 1,566.69 ms |\n\n\n### Scenario: Tests utilizing class fixtures and shared test context\n\n#### macos-latest\n\n```\n\nBenchmarkDotNet v0.15.3, macOS Sequoia 15.6.1 (24G90) [Darwin 24.6.0]\nApple M1 (Virtual), 1 CPU, 3 logical and 3 physical cores\n.NET SDK 9.0.305\n  [Host]     : .NET 9.0.9 (9.0.9, 9.0.925.41916), Arm64 RyuJIT armv8.0-a\n  Job-YNJDZW : .NET 9.0.9 (9.0.9, 9.0.925.41916), Arm64 RyuJIT armv8.0-a\n\nRuntime=.NET 9.0  \n\n```\n| Method    | Version | Mean     | Error    | StdDev    | Median   |\n|---------- |-------- |---------:|---------:|----------:|---------:|\n| TUnit_AOT | 0.61.13 | 157.2 ms |  9.78 ms |  28.67 ms | 151.0 ms |\n| TUnit     | 0.61.13 | 716.3 ms | 44.38 ms | 127.32 ms | 695.7 ms |\n| NUnit     | 4.4.0   | 925.9 ms | 41.36 ms | 121.94 ms | 892.5 ms |\n| xUnit     | 2.9.3   | 889.7 ms | 26.16 ms |  75.46 ms | 883.8 ms |\n| MSTest    | 3.10.4  |       NA |       NA |        NA |       NA |\n\nBenchmarks with issues:\n  RuntimeBenchmarks.MSTest: Job-YNJDZW(Runtime=.NET 9.0)\n\n\n\n#### ubuntu-latest\n\n```\n\nBenchmarkDotNet v0.15.3, Linux Ubuntu 24.04.3 LTS (Noble Numbat)\nAMD EPYC 7763 3.15GHz, 1 CPU, 4 logical and 2 physical cores\n.NET SDK 9.0.305\n  [Host]     : .NET 9.0.9 (9.0.9, 9.0.925.41916), X64 RyuJIT x86-64-v3\n  Job-YNJDZW : .NET 9.0.9 (9.0.9, 9.0.925.41916), X64 RyuJIT x86-64-v3\n\nRuntime=.NET 9.0  \n\n```\n| Method    | Version | Mean        | Error     | StdDev    | Median      |\n|---------- |-------- |------------:|----------:|----------:|------------:|\n| TUnit_AOT | 0.61.13 |    27.09 ms |  0.507 ms |  0.474 ms |    26.90 ms |\n| TUnit     | 0.61.13 |   944.08 ms | 18.351 ms | 19.635 ms |   946.04 ms |\n| NUnit     | 4.4.0   | 1,308.89 ms | 10.780 ms | 10.083 ms | 1,308.97 ms |\n| xUnit     | 2.9.3   | 1,387.90 ms | 14.870 ms | 13.909 ms | 1,389.48 ms |\n| MSTest    | 3.10.4  |          NA |        NA |        NA |          NA |\n\nBenchmarks with issues:\n  RuntimeBenchmarks.MSTest: Job-YNJDZW(Runtime=.NET 9.0)\n\n\n\n#### windows-latest\n\n```\n\nBenchmarkDotNet v0.15.3, Windows 11 (10.0.26100.4946/24H2/2024Update/HudsonValley) (Hyper-V)\nAMD EPYC 7763 2.44GHz, 1 CPU, 4 logical and 2 physical cores\n.NET SDK 9.0.305\n  [Host]     : .NET 9.0.9 (9.0.9, 9.0.925.41916), X64 RyuJIT x86-64-v3\n  Job-YNJDZW : .NET 9.0.9 (9.0.9, 9.0.925.41916), X64 RyuJIT x86-64-v3\n\nRuntime=.NET 9.0  \n\n```\n| Method    | Version | Mean        | Error     | StdDev     | Median      |\n|---------- |-------- |------------:|----------:|-----------:|------------:|\n| TUnit_AOT | 0.61.13 |    63.49 ms |  1.622 ms |   4.756 ms |    62.05 ms |\n| TUnit     | 0.61.13 | 1,098.28 ms | 20.921 ms |  47.648 ms | 1,095.75 ms |\n| NUnit     | 4.4.0   | 1,494.53 ms | 29.750 ms |  72.415 ms | 1,458.86 ms |\n| xUnit     | 2.9.3   | 1,669.62 ms | 48.125 ms | 136.522 ms | 1,647.94 ms |\n| MSTest    | 3.10.4  |          NA |        NA |         NA |          NA |\n\nBenchmarks with issues:\n  RuntimeBenchmarks.MSTest: Job-YNJDZW(Runtime=.NET 9.0)\n\n\n### Scenario: Tests executing in parallel to test framework parallelization\n\n#### macos-latest\n\n```\n\nBenchmarkDotNet v0.15.3, macOS Sequoia 15.6.1 (24G90) [Darwin 24.6.0]\nApple M1 (Virtual), 1 CPU, 3 logical and 3 physical cores\n.NET SDK 9.0.305\n  [Host]     : .NET 9.0.9 (9.0.9, 9.0.925.41916), Arm64 RyuJIT armv8.0-a\n  Job-YNJDZW : .NET 9.0.9 (9.0.9, 9.0.925.41916), Arm64 RyuJIT armv8.0-a\n\nRuntime=.NET 9.0  \n\n```\n| Method    | Version | Mean       | Error     | StdDev    | Median     |\n|---------- |-------- |-----------:|----------:|----------:|-----------:|\n| TUnit_AOT | 0.61.13 |   211.4 ms |  16.11 ms |  47.50 ms |   212.1 ms |\n| TUnit     | 0.61.13 | 1,074.9 ms | 108.97 ms | 317.86 ms | 1,016.4 ms |\n| NUnit     | 4.4.0   | 1,147.3 ms |  72.65 ms | 211.91 ms | 1,123.8 ms |\n| xUnit     | 2.9.3   |   946.3 ms |  43.38 ms | 127.89 ms |   930.7 ms |\n| MSTest    | 3.10.4  |   829.3 ms |  30.12 ms |  88.33 ms |   821.0 ms |\n\n\n\n#### ubuntu-latest\n\n```\n\nBenchmarkDotNet v0.15.3, Linux Ubuntu 24.04.3 LTS (Noble Numbat)\nAMD EPYC 7763 2.45GHz, 1 CPU, 4 logical and 2 physical cores\n.NET SDK 9.0.305\n  [Host]     : .NET 9.0.9 (9.0.9, 9.0.925.41916), X64 RyuJIT x86-64-v3\n  Job-YNJDZW : .NET 9.0.9 (9.0.9, 9.0.925.41916), X64 RyuJIT x86-64-v3\n\nRuntime=.NET 9.0  \n\n```\n| Method    | Version | Mean        | Error     | StdDev    | Median      |\n|---------- |-------- |------------:|----------:|----------:|------------:|\n| TUnit_AOT | 0.61.13 |    26.92 ms |  0.465 ms |  0.435 ms |    26.80 ms |\n| TUnit     | 0.61.13 |   939.12 ms | 18.640 ms | 24.884 ms |   928.86 ms |\n| NUnit     | 4.4.0   | 1,336.50 ms |  7.967 ms |  7.063 ms | 1,338.63 ms |\n| xUnit     | 2.9.3   | 1,410.05 ms |  9.572 ms |  8.953 ms | 1,409.42 ms |\n| MSTest    | 3.10.4  | 1,288.37 ms | 13.379 ms | 11.860 ms | 1,286.14 ms |\n\n\n\n#### windows-latest\n\n```\n\nBenchmarkDotNet v0.15.3, Windows 11 (10.0.26100.4946/24H2/2024Update/HudsonValley) (Hyper-V)\nAMD EPYC 7763 2.44GHz, 1 CPU, 4 logical and 2 physical cores\n.NET SDK 9.0.305\n  [Host]     : .NET 9.0.9 (9.0.9, 9.0.925.41916), X64 RyuJIT x86-64-v3\n  Job-YNJDZW : .NET 9.0.9 (9.0.9, 9.0.925.41916), X64 RyuJIT x86-64-v3\n\nRuntime=.NET 9.0  \n\n```\n| Method    | Version | Mean        | Error     | StdDev    | Median      |\n|---------- |-------- |------------:|----------:|----------:|------------:|\n| TUnit_AOT | 0.61.13 |    67.61 ms |  1.937 ms |  5.710 ms |    66.98 ms |\n| TUnit     | 0.61.13 | 1,172.75 ms | 23.190 ms | 39.378 ms | 1,167.36 ms |\n| NUnit     | 4.4.0   | 1,622.89 ms | 19.758 ms | 18.481 ms | 1,622.22 ms |\n| xUnit     | 2.9.3   | 1,735.38 ms | 28.309 ms | 25.095 ms | 1,729.16 ms |\n| MSTest    | 3.10.4  | 1,548.46 ms | 28.994 ms | 73.272 ms | 1,554.57 ms |\n\n\n### Scenario: A test that takes 50ms to execute, repeated 100 times\n\n#### macos-latest\n\n```\n\nBenchmarkDotNet v0.15.3, macOS Sequoia 15.6.1 (24G90) [Darwin 24.6.0]\nApple M1 (Virtual), 1 CPU, 3 logical and 3 physical cores\n.NET SDK 9.0.305\n  [Host]     : .NET 9.0.9 (9.0.9, 9.0.925.41916), Arm64 RyuJIT armv8.0-a\n  Job-YNJDZW : .NET 9.0.9 (9.0.9, 9.0.925.41916), Arm64 RyuJIT armv8.0-a\n\nRuntime=.NET 9.0  \n\n```\n| Method    | Version | Mean       | Error    | StdDev    | Median     |\n|---------- |-------- |-----------:|---------:|----------:|-----------:|\n| TUnit_AOT | 0.61.13 |   315.6 ms | 26.51 ms |  78.17 ms |   314.5 ms |\n| TUnit     | 0.61.13 | 1,151.9 ms | 92.54 ms | 271.39 ms | 1,070.6 ms |\n| NUnit     | 4.4.0   | 1,002.5 ms | 66.38 ms | 188.32 ms |   970.0 ms |\n| xUnit     | 2.9.3   |   986.2 ms | 48.20 ms | 139.85 ms |   984.7 ms |\n| MSTest    | 3.10.4  | 1,040.7 ms | 43.33 ms | 127.76 ms | 1,008.0 ms |\n\n\n\n#### ubuntu-latest\n\n```\n\nBenchmarkDotNet v0.15.3, Linux Ubuntu 24.04.3 LTS (Noble Numbat)\nAMD EPYC 7763 2.91GHz, 1 CPU, 4 logical and 2 physical cores\n.NET SDK 9.0.305\n  [Host]     : .NET 9.0.9 (9.0.9, 9.0.925.41916), X64 RyuJIT x86-64-v3\n  Job-YNJDZW : .NET 9.0.9 (9.0.9, 9.0.925.41916), X64 RyuJIT x86-64-v3\n\nRuntime=.NET 9.0  \n\n```\n| Method    | Version | Mean        | Error     | StdDev    | Median      |\n|---------- |-------- |------------:|----------:|----------:|------------:|\n| TUnit_AOT | 0.61.13 |    38.91 ms |  0.303 ms |  0.253 ms |    38.87 ms |\n| TUnit     | 0.61.13 |   950.57 ms | 18.019 ms | 22.129 ms |   945.27 ms |\n| NUnit     | 4.4.0   | 1,301.97 ms | 15.537 ms | 14.533 ms | 1,299.41 ms |\n| xUnit     | 2.9.3   | 1,461.88 ms | 15.843 ms | 14.819 ms | 1,463.17 ms |\n| MSTest    | 3.10.4  | 1,324.48 ms | 12.798 ms | 11.345 ms | 1,327.26 ms |\n\n\n\n#### windows-latest\n\n```\n\nBenchmarkDotNet v0.15.3, Windows 11 (10.0.26100.4946/24H2/2024Update/HudsonValley) (Hyper-V)\nAMD EPYC 7763 2.44GHz, 1 CPU, 4 logical and 2 physical cores\n.NET SDK 9.0.305\n  [Host]     : .NET 9.0.9 (9.0.9, 9.0.925.41916), X64 RyuJIT x86-64-v3\n  Job-YNJDZW : .NET 9.0.9 (9.0.9, 9.0.925.41916), X64 RyuJIT x86-64-v3\n\nRuntime=.NET 9.0  \n\n```\n| Method    | Version | Mean        | Error     | StdDev    | Median      |\n|---------- |-------- |------------:|----------:|----------:|------------:|\n| TUnit_AOT | 0.61.13 |    73.73 ms |  1.441 ms |  1.541 ms |    73.50 ms |\n| TUnit     | 0.61.13 | 1,093.55 ms | 21.088 ms | 28.866 ms | 1,084.83 ms |\n| NUnit     | 4.4.0   | 1,513.95 ms | 30.249 ms | 74.768 ms | 1,476.68 ms |\n| xUnit     | 2.9.3   | 1,675.04 ms | 33.426 ms | 45.754 ms | 1,662.99 ms |\n| MSTest    | 3.10.4  | 1,488.84 ms | 22.205 ms | 19.684 ms | 1,492.05 ms |\n\n\n### Scenario: Tests with setup and teardown lifecycle methods\n\n#### macos-latest\n\n```\n\nBenchmarkDotNet v0.15.3, macOS Sequoia 15.6.1 (24G90) [Darwin 24.6.0]\nApple M1 (Virtual), 1 CPU, 3 logical and 3 physical cores\n.NET SDK 9.0.305\n  [Host]     : .NET 9.0.9 (9.0.9, 9.0.925.41916), Arm64 RyuJIT armv8.0-a\n  Job-YNJDZW : .NET 9.0.9 (9.0.9, 9.0.925.41916), Arm64 RyuJIT armv8.0-a\n\nRuntime=.NET 9.0  \n\n```\n| Method    | Version | Mean       | Error     | StdDev    | Median     |\n|---------- |-------- |-----------:|----------:|----------:|-----------:|\n| TUnit_AOT | 0.61.13 |   231.4 ms |  20.05 ms |  59.12 ms |   229.8 ms |\n| TUnit     | 0.61.13 | 1,088.3 ms |  82.32 ms | 242.71 ms | 1,046.1 ms |\n| NUnit     | 4.4.0   | 1,198.5 ms | 100.16 ms | 293.75 ms | 1,129.5 ms |\n| xUnit     | 2.9.3   |   835.6 ms |  16.51 ms |  43.50 ms |   839.8 ms |\n| MSTest    | 3.10.4  |   772.8 ms |  17.93 ms |  52.57 ms |   785.9 ms |\n\n\n\n#### ubuntu-latest\n\n```\n\nBenchmarkDotNet v0.15.3, Linux Ubuntu 24.04.3 LTS (Noble Numbat)\nAMD EPYC 7763 2.73GHz, 1 CPU, 4 logical and 2 physical cores\n.NET SDK 9.0.305\n  [Host]     : .NET 9.0.9 (9.0.9, 9.0.925.41916), X64 RyuJIT x86-64-v3\n  Job-YNJDZW : .NET 9.0.9 (9.0.9, 9.0.925.41916), X64 RyuJIT x86-64-v3\n\nRuntime=.NET 9.0  \n\n```\n| Method    | Version | Mean        | Error     | StdDev    | Median      |\n|---------- |-------- |------------:|----------:|----------:|------------:|\n| TUnit_AOT | 0.61.13 |    28.02 ms |  0.554 ms |  1.358 ms |    28.10 ms |\n| TUnit     | 0.61.13 |   925.55 ms | 17.858 ms | 19.107 ms |   925.64 ms |\n| NUnit     | 4.4.0   | 1,288.93 ms |  9.420 ms |  8.351 ms | 1,290.03 ms |\n| xUnit     | 2.9.3   | 1,352.49 ms |  8.971 ms |  7.491 ms | 1,354.17 ms |\n| MSTest    | 3.10.4  | 1,234.98 ms |  9.729 ms |  9.100 ms | 1,234.56 ms |\n\n\n\n#### windows-latest\n\n```\n\nBenchmarkDotNet v0.15.3, Windows 11 (10.0.26100.4946/24H2/2024Update/HudsonValley) (Hyper-V)\nAMD EPYC 7763 2.44GHz, 1 CPU, 4 logical and 2 physical cores\n.NET SDK 9.0.305\n  [Host]     : .NET 9.0.9 (9.0.9, 9.0.925.41916), X64 RyuJIT x86-64-v3\n  Job-YNJDZW : .NET 9.0.9 (9.0.9, 9.0.925.41916), X64 RyuJIT x86-64-v3\n\nRuntime=.NET 9.0  \n\n```\n| Method    | Version | Mean        | Error     | StdDev    | Median      |\n|---------- |-------- |------------:|----------:|----------:|------------:|\n| TUnit_AOT | 0.61.13 |    66.57 ms |  1.882 ms |  5.491 ms |    66.53 ms |\n| TUnit     | 0.61.13 | 1,105.22 ms | 21.302 ms | 51.446 ms | 1,104.05 ms |\n| NUnit     | 4.4.0   | 1,550.45 ms | 30.506 ms | 49.261 ms | 1,560.91 ms |\n| xUnit     | 2.9.3   | 1,692.52 ms | 33.832 ms | 33.228 ms | 1,687.74 ms |\n| MSTest    | 3.10.4  | 1,543.52 ms | 30.775 ms | 57.802 ms | 1,540.19 ms |\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthomhurst%2FTUnit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthomhurst%2FTUnit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthomhurst%2FTUnit/lists"}