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

您可以调试用于测试 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。 否则,请现在添加一个:右击解决方案中的网站项目,然后单击**“添加新项”**。

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

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

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

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

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

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

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

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

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

  8. 在**“可用进程”下,单击进程的名称,然后单击“附加”**。

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

  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。 否则,请现在添加一个:右击解决方案中的网站项目,然后单击**“添加新项”**。

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

  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++ 中使用单元测试的信息,请参见单元测试和 C++

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

  7. 启动测试。

    要执行此操作,请在“测试视图”窗口中,右击要运行的测试并选择**“运行选定内容”**。

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

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

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

    提示

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

请参见

任务

如何:在运行测试时进行调试

其他资源

如何:为 ASP.NET 应用程序启用调试