我在我的项目(web,VS2019)和XUnit 2.4.1中使用了XUnit Core3.1。最近,我正在考虑添加一些性能测试,然后我遇到了这个库-- BenchmarkDotNet。由于我已经在其他测试中使用了BenchmarkDotNet,所以我希望在XUnit事实中运行XUnit。
我找到了这个帖子,其中解释了程序集的影子副本必须为xunit关闭。所以我试着:
[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文件夹。
public class DotNetBenchmarkTest
{
[Fact]
public void TestMethod()
{
BenchmarkRunner.Run<TestScenarios>();
}
}此外,在中构建发布配置并从测试资源管理器运行此方法将在bin/Release/dotnetcoreapp3.1/但日志文件为空的BenchmarkDotNet.Artifacts文件夹中创建。
{
"$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)。
xunit .\path\assembly-name.dll -noshadow再说一次没有运气。我在这个-noshadow中找到的选项。该选项似乎在旧版本中可用,但没有列出xunit控制台运行程序v2.4.1的帮助输出,但我尝试了一下。
因此,我的问题是,如果可以让DotNetBenchmarkTest完全与XUnit一起工作,如果有,你能指出我做错了什么吗?
发布于 2020-09-01 13:15:16
发布于 2022-10-11 16:00:16
我已经创建了一个包装测试夹具,用于运行基准测试,收集输出,并打印最后的摘要:
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()
{
...
}
}https://stackoverflow.com/questions/60828785
复制相似问题