esg*_*dir 14 c# xunit .net-core benchmarkdotnet
我在我的项目(web api,VS2019)和 XUnit 2.4.1 中使用 .NET Core 3.1。最近我在考虑添加一些性能测试,我遇到了这个库 - BenchmarkDotNet。由于我已经将 XUnit 用于其他测试,因此我想从 XUnit [Fact]s 中运行BenchmarkDotNet。
我发现这篇文章解释说必须为 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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后在Program.cs我有:
class Program
{
static void Main(string[] args)
{
BenchmarkRunner.Run<TestScenarios>();
}
}
Run Code Online (Sandbox Code Playgroud)
在Release 中编译和运行应用程序时,我验证了正确创建了包含日志和基准输出文件的BenchmarkDotNet.Artifacts文件夹。
public class DotNetBenchmarkTest
{
[Fact]
public void TestMethod()
{
BenchmarkRunner.Run<TestScenarios>();
}
}
Run Code Online (Sandbox Code Playgroud)
同样在发布配置中构建并从测试资源管理器运行此方法将在bin/Release/dotnetcoreapp3.1/ 中创建BenchmarkDotNet.Artifacts文件夹,但日志文件为空。
{
"$schema": "https://xunit.net/schema/current/xunit.runner.schema.json",
"shadowCopy": false,
"methodDisplay": "classAndMethod",
"diagnosticMessages": true
}
Run Code Online (Sandbox Code Playgroud)
但似乎对行为没有影响 - 我验证了文件xunit.runner.json已复制到输出 bin 目录(属性->复制到输出目录->始终复制)。
xunit .\path\assembly-name.dll -noshadow
Run Code Online (Sandbox Code Playgroud)
再次没有运气。我在此github 链接中找到的选项-noshadow。似乎该选项在旧版本中可用,但未列出我对xunit 控制台运行程序 v2.4.1 的帮助输出,但我试了一下。
所以我的问题是是否有可能让 DotNetBenchmarkTest 与 XUnit 一起工作,如果是这样,你能指出我做错了什么吗?
| 归档时间: |
|
| 查看次数: |
1933 次 |
| 最近记录: |