2017-11-03 4 views
2

Ich möchte eine benutzerdefinierte Assertion für meine Unit-Test, die die Ausführungszeit von zwei C# -Funktionen messen und vergleichen würde. Ich habe den Code unten geschrieben, aber es gibt einen besseren Weg?Unit Test: Benutzerdefinierte Timer Assert

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); 
    } 
} 

genannt von:

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

(das Ziel ist es, die Ausführungszeit einer Funktion mit der Ausführungszeit der gleichen Funktion im Cache zu vergleichen)

+1

Diese Frage besser geeignet sein könnte, auf dem [Code-Review] (https://codereview.stackexchange.com/) Stack Website :-) – Wndrr

Antwort

0

Die beste Weise, die ich es gefunden Refactoring es mit MSTest-2 wie:

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)); 
} 

Und nennen sie es mit:

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

Wenn jemand einen besseren Weg