2017-11-03 25 views
2

私は2つの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()); 

+1

より良い方法を持っている場合、この質問は:-) [コードレビュー](https://codereview.stackexchange.com/)stackExchangeサイト上の方が適しかもしれません – Wndrr

答えて

0

私が見つけた最良の方法は、それはだ(目標は、キャッシュ内の同じ関数の実行時間との関数の実行時間を比較することです)以下のような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()); 

誰が