2012-04-22 108 views
4

我有一個測試程序,一類TestSeq和方法圍棋(),它包括這樣的塊:如何重構測試應用程序?

  _writer.WriteLine("Doing foo action..."); 
      var stopwatch = Stopwatch.StartNew(); 
      // foo - some work here 
      stopwatch.Stop(); 
      _writer.WriteDone("Results of foo action.", stopwatch.Elapsed); 

在「一些工作」我有WCF客戶端不同的調用(CRUD操作,過濾器,等等。)。

所以,很多代碼重複,顯然一些重構應該在這裏完成。我想創建一個類TestAction,但我不知道什麼是最好的方式,把它的「一些工作」的一部分。

在我看來,這是非常簡單的問題,但我不知道我應該搜索什麼關鍵字。所以,我很高興看到只有關鍵字(模式名稱或其他)或鏈接的答案。

回答

5

我敢肯定,還有更多的東西,但是從我的頭頂開始,你可以用兩種方法來解決這個問題。

方法1:使用使用語法來包裝感興趣的代碼

class MeasuredOperation : IDisposable 
{ 
    Stopwatch stopwatch; 
    string message; 

    public MeasuredOperation(string message) 
    { 
     Console.WriteLine("Started {0}", message); 
     stopwatch = Stopwatch.StartNew(); 
     this.message = message; 
    } 

    public void Dispose() 
    { 
     stopwatch.Stop(); 
     Console.WriteLine("Results of {0} Elapsed {1}", this.message, this.stopwatch.Elapsed); 
    } 
} 

    static void Main(string[] args) 
    { 
     using (new MeasuredOperation("foo action")) 
     { 
      // Do your action 
     } 
    } 

方法2:創建一個新的功能,並在您的代碼塊傳遞爲委託

static void MeasuredAction(string message, Action action) 
{ 
    Console.WriteLine("Started {0}", message); 
    var stopwatch = Stopwatch.StartNew(); 
    action(); 
    stopwatch.Stop(); 
    Console.WriteLine("Results of {0} Elapsed {1}", message, stopwatch.Elapsed); 
} 

static void Main(string[] args) 
{ 
    MeasureAction(delegate() 
    { 
     // do work 
    }); 
}