首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在BenchmarkDotNet中运行XUnit

在BenchmarkDotNet中运行XUnit
EN

Stack Overflow用户
提问于 2020-03-24 10:04:26
回答 2查看 4.9K关注 0票数 30

我在我的项目(web,VS2019)和XUnit 2.4.1中使用了XUnit Core3.1。最近,我正在考虑添加一些性能测试,然后我遇到了这个库-- BenchmarkDotNet。由于我已经在其他测试中使用了BenchmarkDotNet,所以我希望在XUnit事实中运行XUnit。

我找到了这个帖子,其中解释了程序集的影子副本必须为xunit关闭。所以我试着:

  1. 为了保持简单,我用我想要测试的示例方法创建了新的.net核心3.1控制台应用程序项目:
代码语言:javascript
复制
[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中有:

代码语言:javascript
复制
class Program
{
    static void Main(string[] args)
    {
        BenchmarkRunner.Run<TestScenarios>();
    }
}

Release中编译和运行应用程序时,我验证了是否正确创建了带有日志和基准输出文件的BenchmarkDotNet.Artifacts文件夹。

  1. 我将XUnit项目添加到解决方案中,并创建了简单的事实方法:
代码语言:javascript
复制
public class DotNetBenchmarkTest
{
    [Fact]
    public void TestMethod()
    {
        BenchmarkRunner.Run<TestScenarios>();
    }
}

此外,在中构建发布配置并从测试资源管理器运行此方法将在bin/Release/dotnetcoreapp3.1/但日志文件为空的BenchmarkDotNet.Artifacts文件夹中创建。

  1. 我还尝试将具有以下内容的xunit.runner.json文件添加到XUnit项目的根目录中:
代码语言:javascript
复制
{
  "$schema": "https://xunit.net/schema/current/xunit.runner.schema.json",
  "shadowCopy": false,
  "methodDisplay": "classAndMethod",
  "diagnosticMessages": true
}

但是似乎对这种行为没有任何影响--我验证了文件xunit.runner.json被复制到输出bin目录(Properties->Copy to output >Copy)。

  1. 我还安装了xUnit.net Console Runnerv2.4.1,并尝试从控制台运行测试:
代码语言:javascript
复制
xunit .\path\assembly-name.dll -noshadow

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

因此,我的问题是,如果可以让DotNetBenchmarkTest完全与XUnit一起工作,如果有,你能指出我做错了什么吗?

EN

回答 2

Stack Overflow用户

发布于 2020-09-01 13:15:16

我正在XUnit测试中运行XUnit基准测试。

确保您的项目引用了这些NuGet包

  • X单位
  • xunit.runner.visualstudio
  • Microsoft.NET.Test.Sdk

然后,您可以通过命令行从Visual或使用dotnet test运行xunit测试,因为这是.NET核心项目。

xunit.console.runner能够运行.NET框架项目。

有关更多解释,请查看这里这里

票数 0
EN

Stack Overflow用户

发布于 2022-10-11 16:00:16

我已经创建了一个包装测试夹具,用于运行基准测试,收集输出,并打印最后的摘要:

代码语言:javascript
复制
public class Benchmarks
{
    private readonly ITestOutputHelper output;

    public Benchmarks(ITestOutputHelper output)
    {
        this.output = output;
    }

    [Fact]
    public void Run_Benchmarks()
    {
        var logger = new AccumulationLogger();

        var config = ManualConfig.Create(DefaultConfig.Instance)
            .AddLogger(logger)
            .WithOptions(ConfigOptions.DisableOptimizationsValidator);

        BenchmarkRunner.Run<FooBenchmarks>(config);

        // write benchmark summary
        output.WriteLine(logger.GetLog());
    }
}

[MemoryDiagnoser]
public class FooBenchmarks
{
    [GlobalSetup]
    public void Setup()
    {
        ModuleInitializer.Initialize();
        ...
    }

    [Benchmark]
    public async Task ProcessRequest_Benchmark()
    {
        ...
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60828785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档