6

我正在尝试使用单元测试在我的(ASP.Net)Web 应用程序中测试一个类的功能。此类从硬盘驱动器加载一些文件(以执行 xsl 转换):

Xsl = GetXSLFromFile(AppDomain.CurrentDomain.BaseDirectory + "\XML Transformationen\Transformation_01.xslt")

此路径在 Web 应用程序本身的调试过程中被正确解析。但是每当我开始单元测试(它驻留在一个单独的测试项目中,引用 Web 应用程序的项目)时,我都会得到测试项目的路径。

在这种情况下是否可以获取 Web 应用程序的路径,还是我必须使用不同的方法?任何提示表示赞赏。

4

3 回答 3

4

我建议你这样做:

public class MyXslFileLoader
{
    public void Load()
    {
        Load(AppDomain.CurrentDomain.BaseDirectory + "\XML Transformationen\Transformation_01.xslt");
    }

    public void Load(string path)
    {
        Xsl = GetXSLFromFile(path);
    }
}

您将调用Load()您的 Web 应用程序,但在您的单元测试应用程序中使用此方法的重载版本。您可以考虑将 xslt 文件作为资源添加到您的项目中。

您将能够像这样加载路径:

var webApplicationDllPath = Path.GetDirectoryName(typeof(ClassInTheWebApplicationDll).Assembly.GetName().CodeBase);
于 2013-06-26T07:25:05.003 回答
3
string path;
path = System.IO.Path.GetDirectoryName( 
  System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase );

如何:确定执行应用程序的路径

在 C# 中获取可执行文件的路径

希望这有帮助.. :)

于 2013-06-26T07:24:58.737 回答
0

好的,这给出了提示:单元测试项目可以加载目标应用程序的 app.config 文件吗?

在 .testsettings 文件中,由测试项目添加到我的 web 应用程序项目中,我可以添加文件和文件夹,每次执行测试时应将其复制到测试项目调试文件夹中。

因此,在此之后,我可以引用每个 AppDomain.CurrentDomain.BaseDirectory 的 xsl 文件。

此外,为了保持文件夹结构,我必须执行此处描述的操作: Visual Studio 测试项目 - 部署时不复制文件夹

我必须使用文本编辑器编辑 .testsettings 文件,并添加 outputDirectory 参数。之后我重新启动了 Visual Studio,并在启动测试项目时正确复制了文件夹和文件。

于 2013-06-26T08:20:37.150 回答