我使用辅助类来处理获取我可能想要在单元测试中访问的基本路径。
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Brass9.Testing
{
public static class TestHelper
{
public static string GetBinPath()
{
return System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
}
public static string GetProjectPath()
{
string appRoot = GetBinPath();
var dir = new DirectoryInfo(appRoot).Parent.Parent.Parent;
var name = dir.Name;
return dir.FullName + @"\" + name + @"\";
}
public static string GetTestProjectPath()
{
string appRoot = GetBinPath();
var dir = new DirectoryInfo(appRoot).Parent.Parent;
return dir.FullName + @"\";
}
public static string GetMainProjectPath()
{
string testProjectPath = GetTestProjectPath();
// Just hope it ends in the standard .Tests, lop it off, done.
string path = testProjectPath.Substring(0, testProjectPath.Length - 7) + @"\";
return path;
}
}
}
有时我与路径的交互更复杂;我经常使用我命名为“App”的中心类来指示有关应用程序的一些基本细节,例如它的根文件夹、它的根命名空间和模块等。类有时取决于 App 的存在,因此我将放置一个 init App 上的方法,该方法使用上述代码为测试工具初始化自身,并从单元测试中的 Init 命令调用该方法。
(更新)
旧答案
我发现这有助于获取任意路径来访问您打算测试的项目文件夹中的文件(与测试项目文件夹中的文件相反,如果您需要复制内容,这可能会使工作变得忙碌)。
DirectoryInfo projectDir = new DirectoryInfo(@"..\..\..\ProjectName");
string projectDirPath = projectDir.FullName;
然后,您可以使用其中任何一个变量从相关项目中访问您需要的任何内容。显然,将“ProjectName”替换为项目的实际名称。