Использование TDD с OpenXml-SDK

Я начал использовать подход TDD для разработки небольшого приложения, которое считывает данные из файлов Excel. Используя подход с использованием шаблонного типа репозитория, я столкнулся с препятствием, которое сбивает меня с толку.

Для чтения файлов Excel я использую OpenXml-SDK. Обычно для чтения из файла Excel с помощью SDK требуется несколько, если не больше шагов, чтобы на самом деле получить значения, которые вы хотите прочитать.

Подход, который я использовал до сих пор, отражен в следующем тесте и сопутствующей функции.

    [Test]
    public void GetRateData_ShouldReturn_SpreadSheetDocument()
    {
        //Arrange
        var fpBuilder = new Mock();
        fpBuilder.Setup(fp => fp.FullPath()).Returns(It.IsAny());

        var doc = new Mock();
        doc.Setup(d => d.OpenReadOnlySpreadSheet(It.IsAny()))
             .Returns(Mock.Of());

        swapData = new SwapRatesRepository(fpBuilder.Object, doc.Object);

        //Act
        var result = swapData.GetRateData();

        //Assert
        doc.Verify();
        fpBuilder.Verify();
    }

public class SwapRatesRepository: IRatesRepository
{
    private const string SWAP_DATA_FILENAME = "DATE_MKT_ZAR_SWAPFRA1.xlsx";
    private IDirectoryBuilder builder;
    private IOpenXmlUtilities openUtils;

    public SwapRatesRepository(IDirectoryBuilder builder)
    {
        // TODO: Complete member initialization
        this.builder = builder;
    }

    public SwapRatesRepository(IDirectoryBuilder builder, 
                                       IOpenXmlUtilities openUtils)
    {
        // TODO: Complete member initialization
        this.builder = builder;
        this.openUtils = openUtils;
    }

    public SwapRates GetRateData()
    {
        // determine the path of the file based on the date
        builder.FileName = SWAP_DATA_FILENAME;
        var path = builder.FullPath();

        // open the excel file
        using(SpreadsheetDocument doc = openUtils.OpenReadOnlySpreadSheet(path))
        {
            //WorkbookPart wkBookPart = doc.WorkbookPart;
            //WorksheetPart wkSheetPart = wkBookPart.WorksheetParts.First();
            //SheetData sheetData = wkSheetPart.Worksheet
            //                                 .GetFirstChild();

        }

        return new SwapRates(); // ignore this class for now, design later 
    }
}

Однако , следующие шаги после открытия электронной таблицы - это фактически начать опрос объектной модели Excel для получения значений. Как отмечалось выше, я использую макеты для всего, что связано с открытым XML. Однако в некоторых случаях объекты не могут быть издевательскими (или я не знаю, как издеваться над ними, поскольку они статичны). Это привело к появлению IOpenXmlUtilities , которые представляют собой простые вызовы оболочки в OpenXml-SDK.

Что касается дизайна, мы знаем, что чтение данных из файлов Excel - краткосрочное решение (6-8 месяцев) , поэтому эти тесты пока влияют только на доступ к репозиторию / данным.

Очевидно, что я не хочу отказываться от подхода TDD (сколь бы заманчивым он ни был), поэтому мне нужен совет и руководство о том, как продолжить мои усилия по TDD с OpenXml SDK. Другой аспект относится к насмешкам - я не понимаю, когда и как использовать макеты в этом случае. Я не хочу бессознательно писать тесты, проверяющие OpenXml-SDK.

* Примечание: я знаю, что ТВЕРДОСТЬ моего дизайна может быть улучшена, но я пока оставляю это. У меня есть набор отдельных тестов, относящихся к объекту builder . Другой побочный эффект, который может возникнуть, - это дизайн библиотеки оболочки OpenXML-SDK.

Изменить: в то время, когда я не знал об этом, создав оболочки OpenXML-SDK для OpenXML-SDK, я использовал аналогичный шаблон проектирования (или точное) называется шаблоном адаптера .

6
задан Community 23 May 2017 в 11:43
поделиться