单元测试:自定义计时器断言



我想为我的单元测试做一个自定义断言,它将测量两个 c# 函数的执行时间并进行比较。我已经写了下面的代码,但是有更好的方法吗?

public static class AssertExtensions
{
    public static void MoreSlowThan(Action slowFunction, Action fastFunction)
    {
        var watch = Stopwatch.StartNew();
        slowFunction();
        watch.Stop();
        var watchBis = Stopwatch.StartNew();
        fastFunction();
        watchBis.Stop();
        Assert.IsTrue(watch.ElapsedMilliseconds >= watchBis.ElapsedMilliseconds);
    }
}

调用者 :

AssertExtensions.MoreSlowThan(() => MyFunction(), () => MyCachedFunction());

(目标是将一个函数的执行时间与缓存中同一函数的执行时间进行比较)

我发现它的最佳方法是使用 MSTest-2 重构它,例如:

public static void IsFaster(this Assert assert, Action expectedFastAction, Action actualSlowAction)
{
    var slowStopwatch = Stopwatch.StartNew();
    actualSlowAction();
    slowStopwatch.Stop();
    var fastStopwatch = Stopwatch.StartNew();
    expectedFastAction();
    fastStopwatch.Stop();
    Assert.IsTrue(slowStopwatch.Elapsed >= fastStopwatch.Elapsed, string.Format("First function would be faster than the second. Fast function elapsed time : {0}. Slow function elapsed time : {1}", fastStopwatch.Elapsed, slowStopwatch.Elapsed));
}

并用 :

Assert.That.IsSlower(() => MyCachedFunction(), () => MyFunction());

如果有人有更好的方法

最新更新