嗨,我正在用C#编写单元测试。我正在编写用于使用openXML下载excel文件的单元测试。下面是我的单元测试。
[Fact]
public void ShouldAddErrorColumnAtTheEnd()
{
var stream = new MemoryStream();
var expectedHeaders = new[]
{
"Keycode",
"Store",
"Date On Range",
"Date Off Range",
"LSPL",
"Active",
"Ranged",
"Errors",
};
var expectedRows = new[]
{
new string[] { "DEF", "1001", "01/01/2100", "02/02/2100", "-1", "Y", "Y", "Oh no! Bad Lspl" }
};
var parameterUploadRepository = mockProvider.GetDependency<IParameterUploadRepository>();
parameterUploadRepository.GetById(uploadId)
.Returns(new ParameterUpload()
{
Type = Constants.ParameterUploadType.KeycodeParameterUpload,
ID = uploadId,
});
var keycodeParameterChangesWithErrors = new List<KeycodeParameterChange>()
{
new KeycodeParameterChange()
{
UploadId = uploadId,
Keycode = "DEF",
Store = "1001",
OnRange = "01/01/2100",
OffRange = "02/02/2100",
Lspl = "-1",
Active = "Y",
Ranged = "Y",
Errors = "Oh no! Bad Lspl",
}
};
parameterUploadRepository.GetKeycodeParameterChangesWithErrors(uploadId)
.Returns(keycodeParameterChangesWithErrors);
IEnumerable<string> actualHeaders = null;
IEnumerable<IEnumerable<string>> actualRows = null;
var excelService = mockProvider.GetDependency<IExcelWriterService>();
excelService.WriteExcelUsingOpenXML(
Arg.Do<IEnumerable<string>>(headers => actualHeaders = headers),
Arg.Do<IEnumerable<IEnumerable<string>>>(rows => actualRows = rows),
Constants.KeycodeParameterUpload.SheetName)
.Returns(???);
subject.GetUploadSyncErrors(uploadId);
actualHeaders.ShouldBe(expectedHeaders);
actualRows.ShouldBe(expectedRows);
}
我面临的问题是excelService.WriteExcelUsingOpenXML
。 WriteExcelUsingOpenXML的实现如下。
public MemoryStream WriteExcelUsingOpenXML(IEnumerable<string> headers, IEnumerable<IEnumerable<string>> values, string worksheetName)
{
var stream = new MemoryStream();
var headersArray = headers.ToArray();
using (SpreadsheetDocument document = SpreadsheetDocument.Create(stream, SpreadsheetDocumentType.Workbook))
{
WorkbookPart workbookPart = document.AddWorkbookPart();
workbookPart.Workbook = new Workbook();
WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>();
worksheetPart.Worksheet = new Worksheet();
Sheets sheets = workbookPart.Workbook.AppendChild(new Sheets());
Sheet sheet = new Sheet() { Id = workbookPart.GetIdOfPart(worksheetPart), SheetId = 1, Name = Constants.TimephaseWorksheet };
sheets.Append(sheet);
workbookPart.Workbook.Save();
SheetData sheetData = worksheetPart.Worksheet.AppendChild(new SheetData());
// Constructing header
Row row = new Row();
row.Append(
ConstructCell(headersArray[0], CellValues.Number),
ConstructCell(headersArray[1], CellValues.Number),
ConstructCell(headersArray[2], CellValues.Date),
ConstructCell(headersArray[3], CellValues.Number),
ConstructCell(headersArray[4], CellValues.String));
// Insert the header row to the Sheet Data
sheetData.AppendChild(row);
// Inserting each employee
foreach (var valuesEnumeration in values)
{
row = new Row();
var flattend = valuesEnumeration.ToArray();
row.Append(
ConstructCell(flattend[0], CellValues.Number),
ConstructCell(flattend[1], CellValues.String),
ConstructCell(flattend[2], CellValues.String),
ConstructCell(flattend[3], CellValues.Number),
ConstructCell(flattend[4], CellValues.String));
sheetData.AppendChild(row);
}
worksheetPart.Worksheet.Save();
}
return stream;
}
我不确定该退还什么
excelService.CreateExcelPackage(
Arg.Do<IEnumerable<string>>(headers => actualHeaders = headers),
Arg.Do<IEnumerable<IEnumerable<string>>>(rows => actualRows = rows),
Constants.KeycodeParameterUpload.SheetName)
.Returns(????);
有人可以帮我完成这个吗?任何帮助,将不胜感激。谢谢
答案 0 :(得分:0)
您可以测试内存流的长度。如果失败,它将小于1。如果需要,您还可以从内存流中重新组装工作表。