0

我正在创建一个 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 互操作_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);
    }
}

显然,我希望能够在与实际用例最相似的条件下测试这个工具,而这个问题阻止了我这样做。有没有办法指定我要遍历我创建的文件,而不是测试项目目录中类似命名的目录?

4

0 回答 0