如何:在 ASP.NET 解决方案中运行测试时进行调试

 

发布时间: 2016年7月

您可以调试用于测试 ASP.NET Web 项目的单元测试和 Web 测试。 也可以在运行测试时调试 ASP.NET 生产代码。

但是,在测试 ASP.NET 代码时,测试代码不会以通常的方式在 VSTestHost 进程下运行。 而是在 IIS 进程中运行,或者,如果网站是基于文件的,则在 ASP.NET Development Server 进程中运行。 因为测试并非运行典型的测试过程中,所以当测试正在运行时,选中测试菜单中的"调试单元测试"也不会调试。

同样,也不能单步执行 ASP.NET 生产代码,除非启用了调试,并且调试器已附加到 ASP.NET Development Server 进程或 IIS 进程。

在下面的每个过程中,您都将使用**“新建网站”对话框创建一个 ASP.NET 网站项目。 在此对话框中,使用“位置”**列表框选择网站位置。 此选项决定了稍后将调试器附加到哪个进程,以及在 ASP.NET 解决方案中运行测试时需要遵循哪些步骤来进行调试。 有 IIS 和 ASP.NET Development Server 两个选项。

  • 在 IIS 上运行时进行调试

  • 在 ASP.NET Development Server 上运行时进行调试

在 IIS 上运行时进行调试

在如下过程中,会将调试器附加到某个进程。 进程的名称取决于所使用的操作系统,因为操作系统决定了所安装的 IIS 的版本。

在 IIS 上运行 ASP.NET 测试时进行调试

  1. 创建您要测试的 ASP.NET 网站项目以及用来测试该项目的 ASP.NET 单元测试。

    在创建该网站项目时,请在**“新建网站”对话框的“位置”**中选择“HTTP”或“FTP”。 这样可保证宿主进程将是 IIS。

  2. 在 ASP.NET Web 项目中启用调试。 为此,请编辑项目的 Web 配置文件。 如果您的项目已具有 Web.config 文件,请转至步骤 4。 否则,请现在添加一个:在解决方案中打开web网站的快捷菜单,然后选中“添加新项”。

    显示**“添加新项”**对话框。

  3. 在“添加新项”对话框中,选择“Web 配置文件”,然后选择“添加”。

    Web.config 文件即已添加到您的网站项目中。 有关如何使用 Web.config 文件的详细信息,请参阅如何:为 ASP.NET 应用程序启用调试

  4. 在 Web.config 文件中,将内容为 <compilation debug="false"/> 的行更改为 <compilation debug="true"/>。

  5. (可选)在网站的 ASP.NET 单元测试和生产代码中设置断点。

  6. 将调试器附加到 IIS 进程。 为此,请选择“调试”,然后选择“附加到进程”。

    显示**“附加到进程”**对话框。

  7. 在**“可用进程”**下,找到要将调试器附加到的进程的名称。

    如果您需要的进程未显示,可以显示更多正在运行的进程。 为此,请选中**“显示来自所有用户的进程”“显示所有会话中的进程”**。

  8. 在“可用进程”下,选择进程的名称,然后选择“附加”。

    如果您要附加到的进程未在运行,请选择“取消”,然后启动该进程。 为此,请在解决方案资源管理器中,打开web网站项目的快捷菜单,然后选择“在浏览器中查看”。 接着,选择“调试”,然后再次选择“附加到进程”;进程已开始运行并显示在“可用进程”下。 选择该进程的名称,然后选择“附加”。

  9. 启动测试。

    为此,在单元测试资源管理器中选择你要调试的测试,然后从"测试"菜单中,依次选择"调试单元测试"和"已选择测试"。

    备注

    运行测试时,可以选择“运行选定内容”,而不选择“调试选定内容”。二者之间的区别在于,如果您选择“调试选定内容”,调试器在测试完成之后会自动分离;但是,如果您选择“运行选定内容”,调试器在测试完成之后仍然附加到进程。您可能会发现“运行选定内容”更有用,尤其当您打算在调试过程中重新运行测试若干次,而且不希望每次都必须重新附加进程时,它的优势会更明显。如果您选择了“运行选定内容”,那么,要在调试完成时与进程分离,请从“调试”菜单中选择“停止调试”或者按 Shift+F5。

在 ASP.NET Development Server 上运行时进行调试

在 ASP.NET Development Server 上运行测试时进行调试

  1. 创建您要测试的 ASP.NET 网站项目以及用来测试该项目的 ASP.NET 单元测试。

    在创建该网站项目时,请在**“新建网站”对话框的“位置”**中选择“文件系统”。 这样可保证宿主进程将是 ASP.NET Development Server。

  2. 在 ASP.NET Web 项目中启用调试。 为此,请编辑项目的 Web 配置文件。 如果您的项目已具有 Web.config 文件,请转至步骤 4。 否则,请现在添加一个:在解决方案中打开web网站的快捷菜单,然后选中“添加新项”。

    显示**“添加新项”**对话框。

  3. 在“添加新项”对话框中,选择“Web 配置文件”,然后选择“添加”。

    Web.config 文件即已添加到您的网站项目中。 有关如何使用 Web.config 文件的详细信息,请参阅如何:为 ASP.NET 应用程序启用调试

  4. 在 Web.config 文件中,将内容为 <compilation debug="false"/> 的行更改为 <compilation debug="true"/>。

  5. 将 System.Diagnostics.Debugger.Break() 语句添加到 ASP.NET 单元测试的开头。

    备注

    只有当代码中的断点遵循这条 System.Diagnostics.Debugger.Break() 语句时,才会命中这些断点。

    备注

    在 C++ 中,这条语句是 System::Diagnostics::Debugger::Break()。有关如何在 Visual C++ 中使用单元测试的信息,请参见Unit Tests and C++

  6. 在网站的 ASP.NET 单元测试和生产代码中设置断点。

  7. 启动测试。

    为此,在单元测试资源管理器中选择你要调试的测试,然后从"测试"菜单中依次选择"调试单元测试"和"选择测试"。

  8. 一旦测试开始运行,就会出现一个对话框。 该对话框指示程序已经遇到一个断点。

  9. 选择**“调试”,选择已经加载您的解决方案的 Visual Studio 实例,然后选择“是”**。

    Visual Studio 将附加到该进程,执行将在 System.Diagnostics.Debugger.Break() 语句处暂停。 您可以从“调试”菜单中选择**“继续”**或者按 F5 来允许继续执行到下一个断点处。

    备注

    请务必在调试完毕后移除 System.Diagnostics.Debugger.Break() 语句。否则,每次运行测试时,都会出现断点对话框。

请参阅

如何:在运行测试时进行调试
如何:为 ASP.NET 应用程序启用调试