Я хотел бы использовать процесс, описанный здесь: Automated Testing OpenXML SDK (также коснулись здесь: Unit testing an application that talks to microsoft word via OpenXML)Mocking OpenXML SDK ТабличныйДокумент
Однако то, что это берет, чтобы дразнить что-то вроде этого? я сделал следующий интерфейс:
public interface IExcelDocument
{
Row GetRow(uint rowIndex, SheetData sheetData);
SharedStringTablePart GetSharedStringTablePart(SpreadsheetDocument excelDoc);
WorksheetPart GetWorksheetPart(SpreadsheetDocument excelDoc, string sheetName);
Cell InsertCellInWorksheet(string columnName, uint rowIndex, WorksheetPart worksheetPart);
Row InsertRow(WorksheetPart worksheetPart);
int InsertSharedStringItem(string text, SharedStringTablePart shareStringPart);
}
Я предположил бы, что издевается будет выглядеть примерно так:
[TestMethod()]
public void Excel_GetWorkseetPartTest()
{
Mock<IExcelDocument> mockExcelDocument = new Mock<IExcelDocument>();
string sheetName = "sheet";
var excelMock = mockExcelDocument.Object.GetWorksheetPart(MySpreadsheetDocument, sheetName);
Assert.IsTrue(excelMock != null);
}
GetWorksheetPart
метод, который я хочу модульного тестирования и пребывает в классе, который реализует интерфейс IExcelDocument
выглядит следующим образом:
public WorksheetPart GetWorksheetPart(SpreadsheetDocument excelDoc, string sheetName)
{
Sheet sheet = excelDoc.WorkbookPart.Workbook.Descendants<Sheet>()
.SingleOrDefault(s => s.Name == sheetName);
if (sheet == null)
{
throw new ArgumentException(
String.Format("No sheet named {0} found in spreadsheet {1}",
sheetName, _filePath), "sheetName");
}
return (WorksheetPart)excelDoc.WorkbookPart.GetPartById(sheet.Id);
}
Я не могу обернуть вокруг MySpreadsheetDocument
, потому что я должен также реализовать метод SpreadsheetDocument.Open
и не уверен, даже если это разумно.
Вот как я называю GetWorksheetPart
:
using (SpreadsheetDocument _excelDoc = SpreadsheetDocument.Open(_filePath, true))
{
IExcelDocument excelDoc = new ExcelDocument();
WorksheetPart worksheetPart = excelDoc.GetWorksheetPart(_excelDoc, sheetName);
}
Испытывается ли ваш метод в классе реализации интерфейса? Ваша формулировка немного запутанна. – Nkosi
У вас все получилось. –
Если это так, то вы вводите в заблуждение концепцию абстрагирования ваших зависимостей для вашего модульного теста. – Nkosi