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

Unit Test : Custom Timer Assert

我想为我的单元测试创​​建一个自定义断言,它将测量两个 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());

谁有更好的方法