我们正在使用Xunit进行测试。我们正在使用Xunit插件通过内置的Visual Studio 2013 Test Runner运行测试。
问题是某些测试需要引用文件系统上的文件。在执行测试之前,似乎Xunit(或VS Test Runner,不确定是哪个)将程序集(而不是bin目录中的任何支持文件)复制到另一个目录中,因此找不到我们的测试文件。[MS测试框架为列出要复制的文件指定属性,但Xunit没有。
如何要么禁用此复制行为,否则编程方式确定原bin/
来获取文件目录位置?
似乎大多数提议的解决方案(包括Xunit Bug-tracker站点上的建议)都建议将文件存储为嵌入式资源,而不是“始终复制”文件。但是,这并不总是可行的,例如:测试文件操作代码,以及(一种情况下)需要Sqlite数据库文件的代码。
好吧,典型的是,只要我发布问题,我就自己找到答案...
要点在于,程序集的复制(影子复制)似乎是由.NET框架完成的,而不是由Visual Studio或Xunit完成的。
我们一直在使用Assembly.Location
定位程序集文件,从而找到测试文件。但是,这是错误的,因为它为我们提供了阴影复制组件的位置,而不是原始位置。
相反,您应该使用Assembly.CodeBase
来获取基本汇编代码位置。但是,这是(文件)URL,因此有必要从URL中提取路径。新的(C#)代码如下所示:
var codeBaseUrl = new Uri(Assembly.GetExecutingAssembly().CodeBase);
var codeBasePath = Uri.UnescapeDataString(codeBaseUrl.AbsolutePath);
var dirPath = Path.GetDirectoryName(codeBasePath);
return Path.Combine(dirPath, relativePath);
…relativePath
相对于Bin\
目录的路径在哪里。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句