Как получить доступ к файлам в основном каталоге проекта при работе из модульного теста?
Я создаю приложение 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);
}
}
Очевидно, я хотел бы иметь возможность протестировать этот инструмент в условиях, наиболее похожих на фактический вариант использования, насколько это возможно, и эта проблема мешает мне сделать это. Есть ли способ указать, что я хочу перебирать созданные мной файлы, а не каталог с аналогичным именем в каталоге тестового проекта?