Как получить доступ к файлам в основном каталоге проекта при работе из модульного теста? - PullRequest
0 голосов
/ 05 июля 2018

Я создаю приложение XAML, которое может принимать в качестве одного ввода путь к отдельному файлу Excel, а в качестве второго - путь к каталогу, содержащему несколько файлов Excel. Как только они будут указаны, приложение будет сравнивать все списки в каталоге с файлом, указанным в качестве первого параметра.

public partial class MainWindow : System.Windows.Window
{
    public Microsoft.Office.Interop.Excel.Application ExcelApp { get; set; }

    public void CompareLists(string pathToComparisonDirectory, string pathToMasterListFile)
    {
        ConvertExcelFileToCsv(pathToMasterListFile, "Results");
        string masterListFileName = System.IO.Path.GetFileNameWithoutExtension(pathToMasterListFile) + ".csv";

        string masterListLocation = System.IO.Path.Combine(
            "Results", masterListFileName);
        string destinationPath = System.IO.Path.Combine("Results", "Comparison Lists");
        WalkAndConvertExcelFiles(pathToComparisonDirectory, destinationPath);

        string[] resultsPaths = Directory.GetFiles(destinationPath);

        var masterLineItems = File.ReadAllLines(masterListLocation).Skip(3);

        var appraiserPropertiesPrimary = masterLineItems.Select(
            x => new { lastName = x[1], state = x[4], licenseNumber = x[6] });

        var appraiserPropertiesSecondary = masterLineItems.Select(
            x => new { firstName = x[0], lastName = x[1], state = x[4] });

        //foreach()
    }

    public void WalkAndConvertExcelFiles(string directoryPath, string destinationPath = null)
    {
       string[] comparisonListsPaths = Directory.GetFiles(directoryPath);
        var xcelFiles = comparisonListsPaths.Where(x => x.Contains(".xls"));

        foreach (var i in xcelFiles)
        {
            ConvertExcelFileToCsv(i, destinationPath);
        }
    }

    public void ConvertExcelFileToCsv(string filePath, string destinationPath = null)
    {
        string fileNameSansExt = System.IO.Path.GetFileNameWithoutExtension(filePath);

        if (fileNameSansExt.Contains("~"))
            return;

        ExcelApp.Workbooks.Open(filePath);

        string saveDestination = System.IO.Path.Combine(destinationPath ?? "",
            fileNameSansExt + ".csv");

        if (!ConvertedFiles.Any(x => x == saveDestination))
            ConvertedFiles.Add(saveDestination);

        ExcelApp.Workbooks[1].SaveAs(saveDestination, XlFileFormat.xlCSVWindows);
        ExcelApp.Workbooks[1].Close();
    }
}

Проблема, с которой я столкнулся, заключается в том, что Directory.GetFiles() предназначается для каталога, из которого запускается тест, в то время как метод Excel Interop _Workbook.SaveAs() предназначен для каталога реального проекта XAML. Я хочу, чтобы код проекта предназначался для своего собственного каталога при поиске созданных файлов, а не для целевого каталога тестового проекта, что продиктовано поведением Directory.GetFiles().

Чтобы исключить пометку как дубликат, этот вопрос конкретно относится к коду внутри тестируемого проекта, а не к самому коду теста.

Вот мой (неполный, пока не подтвержден) модульный тест:

class TestSuite
{    
    public App app { get; set; }

    [TestMethod]
    public void CompareListsTest()
    {
        if (Application.Current == null)
            app = new App
            {
                ShutdownMode = ShutdownMode.OnExplicitShutdown
            };
        else
            app = (App)Application.Current;

        var window = new MainWindow();

        string sourceDirectoryPath = Path.Combine(Environment.CurrentDirectory, "FilesToParse");
        var mockMasterList = Path.Combine(sourceDirectoryPath, @"Report 6.28.18.xlsx");

        var comparisonDirectoryPath = Path.Combine(sourceDirectoryPath, "ComparisonLists");

        window.CompareLists(comparisonDirectoryPath, mockMasterist);
    }
}

Очевидно, я хотел бы иметь возможность протестировать этот инструмент в условиях, наиболее похожих на фактический вариант использования, насколько это возможно, и эта проблема мешает мне сделать это. Есть ли способ указать, что я хочу перебирать созданные мной файлы, а не каталог с аналогичным именем в каталоге тестового проекта?

...