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

时间:2009-11-21 18:38:02

标签: c# unit-testing resharper

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

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

更新

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

3 个答案:

答案 0 :(得分:83)

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

string path = AppDomain.CurrentDomain.BaseDirectory;

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

[编辑]

在Visual Studio中。

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

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

答案 1 :(得分:20)

(原始答案更新为也接受.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 :(得分:0)

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

这意味着它不依赖于它在特定的位置,也可以避免无意中的篡改。