我目前正在使用VS 2008中的标准Microsoft单元测试套件。还安装了ReSharper 4.5。我的单元测试依赖于预加载数据文件的TestInitialize方法。此测试数据文件的路径将根据我是否使用标准Ctrl-R + Ctrl-T命令与Resharper单元测试执行命令从VS 2008中运行单元测试而有所不同。
我的TestInitialize方法如何知道单元测试数据文件的正确路径?
更新
测试数据足够大,我不想将其推入字符串中,因此更喜欢将其保留为外部文件。我的测试项目的文件结构是使用MVC应用程序创建的标准单元测试项目的文件结构。在测试项目的根目录下,创建了一个名为“测试数据”的新文件夹。这是我想要访问的文件夹而不管测试运行器。
答案 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)
我会在测试套件初始化例程中从头开始创建测试数据。
这意味着它不依赖于它在特定的位置,也可以避免无意中的篡改。