簡體   English   中英

在 XUnit 中運行 BenchmarkDotNet

[英]Running BenchmarkDotNet within XUnit

我在我的項目(web api,VS2019)和 XUnit 2.4.1 中使用 .NET Core 3.1。 最近我在考慮添加一些性能測試,我遇到了這個庫 - BenchmarkDotNet 由於我已經將 XUnit 用於其他測試,因此我想從 XUnit [Fact]s 中運行BenchmarkDotNet

我發現這篇文章解釋說必須為 xunit 關閉程序集的影子副本。 所以我嘗試了以下操作:

  1. 為簡單起見,我創建了全新的.net core 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);
    }
}

然后在Program.cs我有:

class Program
{
    static void Main(string[] args)
    {
        BenchmarkRunner.Run<TestScenarios>();
    }
}

Release 中編譯和運行應用程序時,我驗證了BenchmarkDotNet.Artifacts文件夾與日志和基准輸出文件是否正確創建。

  1. 我已將 XUnit 項目添加到解決方案中並創建了簡單的[Fact]方法:
public class DotNetBenchmarkTest
{
    [Fact]
    public void TestMethod()
    {
        BenchmarkRunner.Run<TestScenarios>();
    }
}

同樣在發布配置中構建並從測試資源管理器運行此方法將在bin/Release/dotnetcoreapp3.1/ 中創建BenchmarkDotNet.Artifacts文件夾,但日志文件為空。

  1. 我還嘗試將包含以下內容的xunit.runner.json文件添加到我的 XUnit 項目的根目錄:
{
  "$schema": "https://xunit.net/schema/current/xunit.runner.schema.json",
  "shadowCopy": false,
  "methodDisplay": "classAndMethod",
  "diagnosticMessages": true
}

但似乎對行為沒有影響 - 我驗證了文件xunit.runner.json已復制到輸出 bin 目錄(屬性->復制到輸出目錄->始終復制)。

  1. 我還安裝了xUnit.net Console Runner v2.4.1並嘗試從控制台運行測試:
xunit .\path\assembly-name.dll -noshadow

再次沒有運氣。 我在此github 鏈接中找到的選項-noshadow 似乎該選項在舊版本中可用,但未列出我對xunit 控制台運行程序 v2.4.1 的幫助輸出,但我試了一下。

所以我的問題是是否有可能讓 DotNetBenchmarkTest 與 XUnit 一起工作,如果是這樣,你能指出我做錯了什么嗎?

我在 XUnit 測試中運行 BenchmarkDotNet 基准測試。

確保您的項目正在引用這些 NuGet 包

  • xunit
  • xunit.runner.visualstudio
  • 微軟.NET.Test.SDK

然后您可以從 Visual Studio 或通過命令行使用dotnet test運行 xunit 測試,因為這是 .NET Core 項目。

xunit.console.runner能夠運行 .NET Framework 項目。

查看此處此處以獲取更多解釋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM