0
我的代碼看起來如下:如何單元測試返回func的字典?
public class FileFormatLookup : Dictionary<string,Func<string>>
{
private Workbook workbook;
private MemoryStream memoryStream;
public FileFormatLookup(Workbook workbook, MemoryStream memoryStream)
{
this.workbook = workbook;
this.memoryStream = memoryStream;
Add();
}
private void Add()
{
base.Add("xls",() =>
{
workbook.Save(memoryStream, SaveFormat.Excel97To2003);
return "ms-excel";
});
}
}
,我試圖寫如下的測試:
class FileFormatLookupTest
{
FileFormatLookup fileFormatLookup;
private Workbook workbook;
private MemoryStream memoryStream;
[SetUp]
public void SetUp()
{
fileFormatLookup = new FileFormatLookup(workbook, memoryStream);
workbook = MockRepository.GenerateMock<Workbook>();
memoryStream = MockRepository.GenerateMock<MemoryStream>();
}
[TearDown]
public void TearDown()
{
workbook.VerifyAllExpectations();
}
[Test]
public void ShouldHaveXlsKey()
{
var xlsResult = fileFormatLookup["xls"].Invoke();
workbook.AssertWasCalled(x=>x.Save(memoryStream,SaveFormat.Excel97To2003));
}
}
這是測試內部字典中的仿函數的正確方法是什麼? 它拋出這個錯誤:
System.InvalidOperationException : No expectations were setup to be verified, ensure that the method call in the action is a virtual (C#)/overridable (VB.Net) method call
如何測試,它返回一個函數的字典?可能嗎? 我可以斷言返回的字符串值,但不是方法調用。
此類Aspose.Cells.Workbook的接口不存在,並且Save方法也不是虛擬的。那麼我有沒有辦法測試電話? –
我用一個常用模式更新了我的答案,用於測試不受您控制的代碼,這應該允許您測試您的代碼。 –