2013-04-23 87 views
0

我有一個使用excel工作表的類。 如何編寫測試以證明合併方法被調用。在excel中嘲笑測試單元格的合併

/// <summary> 
     /// Merges the cells together. 
     /// </summary> 
     /// <param name="ws">The worksheet.</param> 
     /// <param name="cellsToMerge">The cells to merge.</param> 
     /// <exception cref="System.ArgumentNullException">ws;Worksheet has to be defined</exception> 
     /// <exception cref="System.ArgumentException">Cells cannot contain null or empty string;cellsToMerge</exception> 
     public void MergeCellsTogether(Worksheet ws, string cellsToMerge) 
     { 
      if(ws==null) throw new ArgumentNullException("ws","Worksheet has to be defined"); 
      if(string.IsNullOrEmpty(cellsToMerge))throw new ArgumentException("Cells cannot contain null or empty string", "cellsToMerge"); 

      var cells = ws.Cells[cellsToMerge]; // failing to setup 
      ws.Range[cells].Merge(); 
     } 

現在我的測試是使用最小起訂量

[TestMethod] 
     public void TestForMergingCellsTogether() 
     { 
      // assign 
      var cellsToMerge = "A1:C3"; 

      // mock 
      var ws = new Mock<Worksheet>(); 
      var range = new Mock<Range>(); 
      ws.Setup(x => x.get_Range(It.IsAny<object>(), It.IsAny<object>())).Returns(range.Object); 

// this is part that is giving my headake   
ws.Setup(x => x.Cells[It.IsAny<object>(),It.IsAny<object>()]).Returns(range.Object); 


      range.Setup(x => x.Merge(It.IsAny<object>())); 
      // act 
      var ps = new RenderProcess("fileName"); 
      ps.MergeCellsTogether(ws.Object, cellsToMerge); 

      // assert 
      range.VerifyAll(); 
     } 
+0

雖然很值得稱道的,你要與脆性測試結束了,如果你試圖嘲笑像工作表。您是否認爲更傾向於使用內存流中真實電子表格進行測試的集成測試? – 2013-04-23 16:14:13

+0

如何在小的私有方法中合併合併,您可以驗證它是否被調用,假設它確實合併了單元格。 – 2013-04-23 16:30:09

+0

@JackHughes模擬工作表的事實是一個很好的主意,因爲工作表是一個接口。我更喜歡不運行集成測試,驗證這個功能,因爲我會碰到不同的問題與Excel:( – cpoDesign 2013-04-24 07:39:44

回答

0

我已經找到解決我的問題。 我的方法不正確。

我的更新(簡化)代碼

/// <summary> 
     /// Merges the cells together. 
     /// </summary> 
     /// <param name="worksheet">The worksheet.</param> 
     /// <param name="cellsToMerge">The cells to merge.</param> 
     /// <exception cref="System.ArgumentNullException">ws;Worksheet has to be defined</exception> 
     /// <exception cref="System.ArgumentException">Cells cannot contain null or empty string;cellsToMerge</exception> 
     public void MergeCellsTogether(Worksheet worksheet, string cellsToMerge) 
     { 
      if(worksheet==null) throw new ArgumentNullException("worksheet","Worksheet has to be defined"); 
      if(string.IsNullOrEmpty(cellsToMerge))throw new ArgumentException("Cells cannot contain null or empty string", "cellsToMerge"); 

      worksheet.Range[cellsToMerge].Merge(); 
     } 

而且我的測試方法:

// assign 
       var cellsToMerge = "A1:C3"; 

       // mock 
       var ws = new Mock<Worksheet>(); 
       var range = new Mock<Range>(); 
       ws.Setup(x => x.get_Range(It.IsAny<object>(), It.IsAny<object>())).Returns(range.Object); 

       range.Setup(x => x.Merge(It.IsAny<object>())); 
       // act 
       var process = new RenderExcel(); 
       process.CreateExcelWorkSheet("fileName"); 
       process.MergeCellsTogether((Worksheet)ws.Object, cellsToMerge); 

       // assert 
       range.VerifyAll();