c# - 在 XUnit 中运行 BenchmarkDotNet

标签 c# .net-core xunit benchmarkdotnet

我在我的项目(web api,VS2019)和 XUnit 2.4.1 中使用 .NET Core 3.1。最近我正在考虑添加一些性能测试,我遇到了这个库 - BenchmarkDotNet .由于我已经将 XUnit 用于其他测试,因此我想运行 BenchmarkDotNet 来自 XUnit [Fact] 的内部。

我找到了这个 post其中解释说必须为 xunit 关闭程序集的影子副本。所以我尝试了以下操作:

  • 为了简单起见,我创建了全新的 .net 核心 3.1 带有示例方法的控制台应用程序项目我想进行基准测试:
  • [SimpleJob(RuntimeMoniker.NetCoreApp31)]
    [MinColumn, MaxColumn, MedianColumn, KurtosisColumn]
    [HtmlExporter]
    public class TestScenarios
    {
        [Params("test")]
        public string TextToHash { get; set; }
    
        [Benchmark]
        public string CalculateSha256()
        {
            var engine = SHA256.Create();
            var hash = engine.ComputeHash(Encoding.ASCII.GetBytes(TextToHash));
            return Encoding.ASCII.GetString(hash);
        }
    }
    

    然后在 程序.cs 我有:
    class Program
    {
        static void Main(string[] args)
        {
            BenchmarkRunner.Run<TestScenarios>();
        }
    }
    

    中编译和运行应用程序时发布 我验证了正确创建了包含日志和基准输出文件的 BenchmarkDotNet.Artifacts 文件夹。
  • 我已将 XUnit 项目添加到解决方案中并创建了简单的 【事实】方法:
  • public class DotNetBenchmarkTest
    {
        [Fact]
        public void TestMethod()
        {
            BenchmarkRunner.Run<TestScenarios>();
        }
    }
    

    也在 build 发布 配置并从测试资源管理器运行此方法将在 bin/Release/dotnetcoreapp3.1/中创建 BenchmarkDotNet.Artifacts 文件夹,但日志文件为空。
  • 我也尝试添加 xunit.runner.json 包含以下内容的文件到我的 XUnit 项目的根目录:
  • {
      "$schema": "https://xunit.net/schema/current/xunit.runner.schema.json",
      "shadowCopy": false,
      "methodDisplay": "classAndMethod",
      "diagnosticMessages": true
    }
    

    但似乎对行为没有影响 - 我验证了文件 xunit.runner.json 已复制到输出 bin 目录(属性->复制到输出目录->始终复制)。
  • 我还安装了 xUnit.net Console Runner v2.4.1 并尝试从控制台运行测试:
  • xunit .\path\assembly-name.dll -noshadow
    

    再次没有运气。选项 -noshadow 我在此找到 github link .似乎该选项在旧版本中可用,但未列出我对 xunit 控制台运行程序 v2.4.1 的帮助输出,但我试了一下。

    所以我的问题是是否有可能让 DotNetBenchmarkTest 与 XUnit 一起工作,如果是这样,你能指出我做错了什么吗?

    最佳答案

    我在 XUnit 测试中运行 BenchmarkDotNet 基准测试。
    确保您的项目正在引用这些 NuGet 包

  • xunit
  • xunit.runner.visualstudio
  • Microsoft.NET.Test.Sdk

  • 然后你可以从 Visual Studio 或使用 dotnet test 运行 xunit 测试。通过命令行,因为这是 .NET Core 项目。xunit.console.runner能够运行 .NET Framework 项目。
    查询 herehere更多解释。

    关于c# - 在 XUnit 中运行 BenchmarkDotNet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60828785/

    相关文章:

    python - 在 pytest 中使用 conftest 设置/拆卸

    c# - T4MVC 扰乱了我的覆盖范围

    odata - 如何在.net core应用程序中使用OData?

    asp.net-core - 从 .Net Core 3 引用 .NET Framework DLL

    unit-testing - 如何将多个参数传递给在 Matlab xUnit 中共享相同设置代码的测试?

    c# - F#:为什么这两个集合不相等?

    c# - 在 C# 中使用 Amadeus Soap4.0

    c# - 从 MVC Controller 返回一个字符串到 jQuery

    c# - 处理导致空序列等的 LINQ 语句的最佳实践?

    selenium - .NET Core Selenium WebDriver 未找到