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();
}
雖然很值得稱道的,你要與脆性測試結束了,如果你試圖嘲笑像工作表。您是否認爲更傾向於使用內存流中真實電子表格進行測試的集成測試? – 2013-04-23 16:14:13
如何在小的私有方法中合併合併,您可以驗證它是否被調用,假設它確實合併了單元格。 – 2013-04-23 16:30:09
@JackHughes模擬工作表的事實是一個很好的主意,因爲工作表是一個接口。我更喜歡不運行集成測試,驗證這個功能,因爲我會碰到不同的問題與Excel:( – cpoDesign 2013-04-24 07:39:44