在编写单元测试时,我们可以通过简单地将元素添加到集合中来添加更多测试用例,例如TestCaseSource
在 NUnit 中使用。
是否可以在 BenchmarkDotNet 中做类似的事情,并从集合中创建一组基准?
这将节省大量样板文件,尤其是在对多个输入组合进行基准测试或对基准方法进行额外测试时。
最小示例代码:
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
public interface IAlgorithm
{
public void DoWork();
}
public class AlgorithmA: IAlgorithm
{
public void DoWork() { } // something slow
}
public class AlgorithmB : IAlgorithm
{
public void DoWork() { } // something slow
}
public class MyBenchmarks
{
AlgorithmA classA = new AlgorithmA();
AlgorithmB classB = new AlgorithmB();
[Benchmark]
public void A() => classA.DoWork();
[Benchmark]
public void B() => classB.DoWork();
}
public class WhatIWouldLike
{
IAlgorithm[] classes = new IAlgorithm[] { new AlgorithmA(), new AlgorithmB() };
// ...automatically create a benchmark for DoWork() on element of the array
}
class Program
{
static void Main(string[] args)
{
BenchmarkRunner.Run<MyBenchmarks>();
}
}