测试数据文件以进行单元测试的路径

我目前在VS 2008中使用标准的Microsoft Unit Test套件 . 还安装了ReSharper 4.5 . 我的单元测试依赖于预加载数据文件的TestInitialize方法 . 此测试数据文件的路径将根据我是否使用标准Ctrl-R Ctrl-T命令与Resharper单元测试执行命令从VS 2008中运行单元测试而有所不同 .

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

Update:

测试数据足够大,我不想将其推入字符串,所以更喜欢将其保存为外部文件 . 我的测试项目的文件结构是使用MVC应用程序创建的标准单元测试项目的文件结构 . 在测试项目的根目录下,创建了一个名为“测试数据”的新文件夹 . 这是我想要访问的文件夹,无论测试运行器如何 .

回答(3)

2 years ago

你说测试文件的位置会因测试运行符的不同而不同,所以我认为它包含在项目中并与dll一起复制 .

string path = AppDomain.CurrentDomain.BaseDirectory;

这将为您提供执行测试的文件夹 .

[编辑]

在Visual Studio中 .

Resharper - >选项 - >工具 - >单元测试 - >运行结果来自:指定文件夹(或更改测试项目的项目输出文件夹)

您可以在哪里指定测试数据的文件夹,或相对于指定文件夹的文件夹 .

2 years ago

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

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

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);
}

2 years ago

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

这意味着它不依赖于它在特定位置,并且也可以安全地防止无意中被篡改 .