C# 从单元测试操作时,如何访问主项目目录中的文件?
我正在创建一个XAML应用程序,它可以接受一个输入到单个Excel文件的路径,另一个输入到包含多个Excel文件的目录的路径。一旦指定了这些参数,应用程序就会将目录中的所有列表与指定为第一个参数的文件进行比较C# 从单元测试操作时,如何访问主项目目录中的文件?,c#,.net,directory,system.io.directory,C#,.net,Directory,System.io.directory,我正在创建一个XAML应用程序,它可以接受一个输入到单个Excel文件的路径,另一个输入到包含多个Excel文件的目录的路径。一旦指定了这些参数,应用程序就会将目录中的所有列表与指定为第一个参数的文件进行比较 public partial class MainWindow : System.Windows.Window { public Microsoft.Office.Interop.Excel.Application ExcelApp { get; set; } publi
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\u 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);
}
}
显然,我希望能够在与实际用例最相似的条件下测试这个工具,而这个问题阻碍了我这样做。有没有一种方法可以指定我想要迭代我创建的文件,而不是在测试项目的目录中迭代一个类似名称的目录 为什么要将
“结果”
硬编码为目标路径?在测试和实际执行期间,您希望它有什么路径。考虑在构建机器上运行测试。@vendettamit将此归因于仍处于构建/测试阶段的工具。该功能不会出现在最终版本中。那么为什么不将其配置为可配置的呢?方法参数或属性。在测试中使用TestContext.ResultDurectory,在真实世界中使用%Temp%。