我有一个测试项目,我需要在其中加载XLSX文件。为此,我添加了一个带有copy-always的文件,以便它最终出现在build目录中,但以下所有内容都返回了错误的路径:
System.Reflection.Assembly.GetAssembly(typeof(testclass)).Location;
AppDomain.CurrentDomain.BaseDirectory
Directory.GetCurrentDirectory();
他们都给了我:
"C:\\Users\\username\\Documents\\visual-studio-projecten\\projectname\\TestResults\\username_ICT003 2012-06-20 12_07_06\\Out"
我需要
"C:\\Users\\username\\Documents\\visual-studio-projecten\\projectname\\TestProject\\bin\\Debug\\SupportFiles\\"
我如何做到这一点?
答案 0 :(得分:6)
使用DeploymentItemAttribute属性。引用MSDN:
此属性标识包含已部署的测试用于运行的文件的文件和目录。测试引擎制作部署项的副本,并根据指定的OutputDirectory或缺省目录将它们放在测试部署目录中。
例如:
[TestClass]
public class MyUnitTest
{
[TestMethod()]
[DeploymentItem("myfile.txt")]
public void MyTestMethod()
{
string file = "myfile.txt";
Assert.IsTrue(File.Exists(file), "deployment failed: " + file +
" did not get deployed");
}
}
当然假设您使用MSTest作为测试框架。
答案 1 :(得分:5)
试试这个:
string dir = Path.Combine(
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),
"SupportFiles");
不要使用Directory.GetCurrentDirectory()
,因为当前目录不能是您的exe目录,并且可能在程序执行期间发生变化。
答案 2 :(得分:1)
如果有人这样的话,如果您使用的是 .testsettings文件,并且上的 DeploymentItem属性不起作用即使您已将文件设置为内容并始终复制,也是因为您在.testsettings文件中已有部署部分,或者您需要在.testsettings文件中使用DeploymentItem。以下是我们现在的看法:
<Deployment>
<DeploymentItem filename="Tests\Unit Tests\ConnectionStrings.config" />
<DeploymentItem filename="Tests\Unit Tests\<project dir>\bin\Debug\TestFiles\" outputDirectory="TestFiles" />
</Deployment>
一个人做一个文件,另一个做一个目录中的13个文件。注意目录的“文件名”的尾部斜杠!
解决方案和更多信息发现于:
答案 3 :(得分:1)
切换到 xUnit 或 NUnit 。
然后选项2.,3和Environment.CurrentDirectory
都可以根据需要工作,返回build-output-diretory。删除“bin \ Debug”或“bin \ Release”,文件可以保留为“不要复制”。
另请参阅ElasticSearch中的GetFileFromMethod - 方法和usage,以获得每次测试一个文件的好方法。