我尝试使用单元测试在我的(ASP.Net)webapplication中测试类的功能。此类从harddrive加载一些文件(以执行xsl转换):
Xsl = GetXSLFromFile(AppDomain.CurrentDomain.BaseDirectory + "\XML Transformationen\Transformation_01.xslt")
在调试Web应用程序本身期间,此路径已正确解析。但每当我开始单元测试(它位于一个单独的测试项目中,引用web应用程序的项目)时,我就会得到测试项目的路径。
是否有可能在此场景中获取Web应用程序的路径,或者我是否必须使用其他方法? 任何提示都表示赞赏。
亲切的问候, 凯哈特曼
答案 0 :(得分:4)
我建议你这样做:
public class MyXslFileLoader
{
public void Load()
{
Load(AppDomain.CurrentDomain.BaseDirectory + "\XML Transformationen\Transformation_01.xslt");
}
public void Load(string path)
{
Xsl = GetXSLFromFile(path);
}
}
您可以在Web应用程序中调用Load()
,但在unittest应用程序中使用此方法的重载版本。您可以考虑将xslt文件作为资源添加到项目中。
您可以像这样加载路径:
var webApplicationDllPath = Path.GetDirectoryName(typeof(ClassInTheWebApplicationDll).Assembly.GetName().CodeBase);
答案 1 :(得分:3)
string path;
path = System.IO.Path.GetDirectoryName(
System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase );
HOW TO: Determine the Executing Application's Path
Getting the path of a executable file in C#
希望这有用..:)
答案 2 :(得分:0)
好的,这给了提示:Can a unit test project load the target application's app.config file?
在测试项目添加到我的webapplication项目的.testsettings文件中,我可以添加每次执行测试时应该复制到测试项目调试文件夹的文件和文件夹。
所以在此之后我可以引用每个AppDomain.CurrentDomain.BaseDirectory的xsl文件。
此外,为了保持文件夹结构,我不得不做这里描述的内容: Visual Studio Test Project - Does not copy folder on deployment
我必须使用文本编辑器编辑.testsettings文件,并添加outputDirectory参数。之后我重新启动了Visual Studio,并在启动测试项目时正确复制了文件夹和文件。