运行unit testing时如何获取目录

嗨,当运行我的unit testing我想获得我的项目运行目录来检索文件。

说我有一个名为MyProject的testing项目。 testing我运行:

AppDomain.CurrentDomain.SetupInformation.ApplicationBase 

并收到"C:\\Source\\MyProject.Test\\bin\\Debug"

这接近我所追求的。 我不想要bin\\Debug部分。

任何人都知道如何才能得到"C:\\Source\\MyProject.Test\\"

我会做不同的事情。

我build议将该文件作为解决scheme/项目的一部分。 然后右键单击 – >属性 – >复制到输出=复制总是。

该文件将被复制到任何您的输出目录(例如C:\ Source \ MyProject.Test \ bin \ Debug)。

通常,您可以像这样获取您的解决scheme目录(或项目目录,取决于您的解决scheme结构):

 string solution_dir = Path.GetDirectoryName(Path.GetDirectoryName(TestContext.TestDir)); 

这将为您提供由testing项目创build的“TestResults”文件夹的父目录。

 Directory.GetParent(Directory.GetCurrentDirectory()).Parent.FullName; 

这会给你你需要的目录….

 AppDomain.CurrentDomain.SetupInformation.ApplicationBase 

除了

 Directory.GetCurrentDirectory(). 

已经熟悉了这个链接

http://msdn.microsoft.com/en-us/library/system.appdomain.currentdomain.aspx

 /// <summary> /// Testing various directory sources in a Unit Test project /// </summary> /// <remarks> /// I want to mimic the web app's App_Data folder in a Unit Test project: /// A) Using Copy to Output Directory on each data file /// D) Without having to set Copy to Output Directory on each data file /// </remarks> [TestMethod] public void UT_PathsExist() { // Gets bin\Release or bin\Debug depending on mode string baseA = AppDomain.CurrentDomain.SetupInformation.ApplicationBase; Console.WriteLine(string.Format("Dir A:{0}", baseA)); Assert.IsTrue(System.IO.Directory.Exists(baseA)); // Gets bin\Release or bin\Debug depending on mode string baseB = AppDomain.CurrentDomain.BaseDirectory; Console.WriteLine(string.Format("Dir B:{0}", baseB)); Assert.IsTrue(System.IO.Directory.Exists(baseB)); // Returns empty string (or exception if you use .ToString() string baseC = (string)AppDomain.CurrentDomain.GetData("DataDirectory"); Console.WriteLine(string.Format("Dir C:{0}", baseC)); Assert.IsFalse(System.IO.Directory.Exists(baseC)); // Move up two levels string baseD = System.IO.Directory.GetParent(baseA).Parent.FullName; Console.WriteLine(string.Format("Dir D:{0}", baseD)); Assert.IsTrue(System.IO.Directory.Exists(baseD)); // You need to set the Copy to Output Directory on each data file var appPathA = System.IO.Path.Combine(baseA, "App_Data"); Console.WriteLine(string.Format("Dir A/App_Data:{0}", appPathA)); // C:/solution/UnitTestProject/bin/Debug/App_Data Assert.IsTrue(System.IO.Directory.Exists(appPathA)); // You can work with data files in the project directory's App_Data folder (or any other test data folder) var appPathD = System.IO.Path.Combine(baseD, "App_Data"); Console.WriteLine(string.Format("Dir D/App_Data:{0}", appPathD)); // C:/solution/UnitTestProject/App_Data Assert.IsTrue(System.IO.Directory.Exists(appPathD)); } 

我通常这样做,然后我只是添加"..\..\"到path到我想要的目录。

所以你可以做的是这样的:

 var path = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + @"..\..\"; 

我不确定这是否有帮助,但是这在下面的问题中看起来会被简单的提及。

Visual Studio解决schemepath环境variables

我发现的最好的解决scheme是将该文件作为testing项目中的embedded式资源,并从我的unit testing中获得。 有了这个解决scheme,我不需要关心文件path。