C# 用于单元测试的测试数据文件的路径

C# 用于单元测试的测试数据文件的路径,c#,unit-testing,resharper,C#,Unit Testing,Resharper,我目前正在VS2008中使用标准的Microsoft单元测试套件。还安装了ReSharper 4.5。我的单元测试依赖于预加载数据文件的TestInitialize方法。此测试数据文件的路径将有所不同,这取决于我是否使用标准的Ctrl-R+Ctrl-T命令和Resharper单元测试执行命令在VS2008中运行单元测试 我的TestInitialize方法如何知道单元测试数据文件的正确路径 更新: 测试数据的大小足够大,因此我不想将其放入字符串中,因此宁愿将其作为外部文件保存。我的测试项目的文件

我目前正在VS2008中使用标准的Microsoft单元测试套件。还安装了ReSharper 4.5。我的单元测试依赖于预加载数据文件的TestInitialize方法。此测试数据文件的路径将有所不同,这取决于我是否使用标准的Ctrl-R+Ctrl-T命令和Resharper单元测试执行命令在VS2008中运行单元测试

我的TestInitialize方法如何知道单元测试数据文件的正确路径

更新:


测试数据的大小足够大,因此我不想将其放入字符串中,因此宁愿将其作为外部文件保存。我的测试项目的文件结构是使用MVC应用程序创建的标准单元测试项目的文件结构。在测试项目的根目录下,创建了一个名为“测试数据”的新文件夹。无论测试运行程序如何,我都希望访问该文件夹。

我将在测试套件初始化例程中从头开始创建测试数据


这意味着它不依赖于它位于特定的位置,也不会被无意中篡改。

您是说测试文件的位置会因测试运行程序的不同而不同,因此我假设它包含在项目中,并与dll一起复制

string path = AppDomain.CurrentDomain.BaseDirectory;
这将获得执行测试的文件夹

[编辑]

在VisualStudio中

Resharper->Options->Tools->unittesting->runresults from:指定文件夹(或更改测试项目的项目输出文件夹)

您可以在其中指定测试数据的文件夹,或相对于指定文件夹的文件夹。

(原始答案更新为也接受.net core多目标项目输出路径)

它假定您的测试数据文件位于根“测试数据”文件夹中作为参数“testDataFolder”传递的文件夹中:


非常感谢。我在胡乱使用ExecutiveGassembly,得到一条奇怪的路径,指向我的windows配置文件深处。测试数据看不到…请注意,这将为您提供测试项目中\bin\Debug或\bin\Release文件夹的路径,如“C:\Yadda\MyProject\bin\Debug”。另外请注意,至少对于Visual Studio 2019,如果您将文件放在解决方案中的子文件夹中,文件夹结构将保留在副本中。当然,在解决方案资源管理器中,确保您的文件具有“始终复制”或“如果更新,则复制”属性。我有一个做大量数学运算的库。我想确保我得到各种输入的预期结果。每个测试涉及2个输入坐标和一个结果,每个测试留下9位数字。我更希望有一个包含我的输入的文件,而不是一堆复制/粘贴文件。要使用ApplicationEnvironment,我需要包括哪些内容?@miguelmpn您可以使用AppDomain.CurrentDomain.BaseDirectoryNuget package for ApplicationEnvironment?这假设构建输出目录是默认的
bin/Foo/net5.0
。通过获取csproj文件的路径,是否可能以某种方式使其更加健壮?@YarekT是一个古老的答案,可能需要更新,我不确定,但可能使用IHostingEnvironment.ContentRootPath直接提供foder
public static string GetTestDataFolder(string testDataFolder)
{
    string startupPath = ApplicationEnvironment.ApplicationBasePath;
    var pathItems = startupPath.Split(Path.DirectorySeparatorChar);
    var pos = pathItems.Reverse().ToList().FindIndex(x => string.Equals("bin", x));
    string projectPath = String.Join(Path.DirectorySeparatorChar.ToString(), pathItems.Take(pathItems.Length - pos - 1));
    return Path.Combine(projectPath, "Test_Data", testDataFolder);
}