ASP.NET 单元测试概述

wanghuasz 贡献于2014-06-26

作者 Windows 用户  创建于2011-10-28 01:55:00   修改者Windows 用户  修改于2011-10-28 02:05:00字数6796

文档摘要: 使用ASP.NET单元测试可对ASP.NET站点或项目中的方法进行测试。例如,可以对组成ASP.NET项目业务逻辑的方法进行测试。ASP.NET单元测试和其他单元测试的不同之处在于在其中运行测试的进程。ASP.NET测试在将运行生产代码的相同环境中运行。
关键词:

ASP.NET 单元测试概述 Visual Studio 2005 · Visual Studio 2008 使用 ASP.NET 单元测试可对 ASP.NET 站点或项目中的方法进行测试。例如,可以对组成 ASP.NET 项目业务逻辑的方法进行测试。 ASP.NET 单元测试和其他单元测试的不同之处在于在其中运行测试的进程。ASP.NET 测试在将运行生产代码的相同环境中运行。为此,可以选择 IIS,也可以选择 ASP.NET Development Server。当在 Web 服务器进程中运行测试时,可以访问与该进程关联的所有环境,如 Page 对象。 创建 ASP.NET 单元测试的方法有两种:通过生成;通过配置现有单元测试使其作为 ASP.NET 单元测试运行。在 如何:创建 ASP.NET 单元测试 中对这两种方法进行了描述。 还可以在运行配置中指定将用于运行的单元测试的设置。只有该运行配置活动时才能使用这些设置。有关更多信息,请参见如何:创建 ASP.NET 单元测试。 在运行 ASP.NET 单元测试时使用另一进程标识 测试 ASP.NET 代码时,测试代码要么运行在 IIS 进程中,要么运行在 ASP.NET Development Server 进程中。如果 ASP.NET 单元测试在 IIS 进程中运行,为安全起见,您可以选择让 ASP.NET 进程以“非默认用户”身份运行,即以另一进程标识运行。 例如,如果 ASP.NET 网站必须访问计算机上的文件夹、文件或数据库等资源,则可以选择以对这些资源具有恰如其分、不多不少的权限的进程标识来运行 ASP.NET 进程。 注意 默认的标识取决于 IIS 的版本。例如,在 Windows Server 2003 中,ASP.NET 进程 w3wp.exe 的默认标识为“NETWORK SERVICE”。 在这种情况下单元测试执行可能会失败。例如,以非默认用户身份运行的 ASP.NET 进程可能只有有限的权限,但仍可能尝试在 %WINDIR%\Temp 文件夹中生成临时文件。如果 %WINDIR%\Temp 上的默认权限使该进程无法生成这些文件,则生成操作就会失败。在这种情况下,为了使单元测试执行能够成功,您必须使该进程对 %WINDIR%\Temp 文件夹拥有更高的权限。 如果服务帐户不能访问部署根文件夹,则单元测试执行也可能会失败。如果发生这种情况,Visual Studio 将显示一个对话框,以解释错误并使您可以通过单击“确定”来忽略该错误。 ASP.NET 单元测试和专用访问器 Visual Studio 2005 · Visual Studio 2008 为测试 ASP.NET 应用程序而生成的代码使用专用访问器,即使您测试的所有内容都是公共的也是如此。 生成的代码为什么使用专用访问器呢?因为 Web 代码没有可供您在运行时和部署时将进程绑定到的可预测的程序集名称。在运行时,包含单元测试的测试程序集必须能够绑定到包含要测试的代码的程序集。该可以通过该绑定对该程序集中的方法运行单元测试
。 为实现运行时绑定
,在生成单元测试的过程中还会使用反射在 ASP.NET 上下文中创建一个类型。该新建类型
位于 ASP.NET 应用程序的应用程序域中的程序集中。实现这一运行时绑定之后,必须使用反射来访问它,并且此反射由专用访问器对象执行。 如何:创建 ASP.NET 单元测试 Visual Studio 2005 · Visual Studio 2008 使用 ASP.NET 单元测试可对 ASP.NET 项目中的方法进行测试。可采用以下两种方式中的任意一种创建 ASP.NET 单元测试: · 通过从 ASP.NET 项目生成 ASP.NET 单元测试。这是最常用的方法。 · 通过将现有的单元测试配置为 ASP.NET 单元测试。 还可以在运行配置中指定与 ASP.NET 单元测试所用属性对应的设置。以下几节对这些过程进行了描述。 注意 在运行 ASP.NET 单元测试时,请勿对包含 ASP.NET 单元测试的类中的任何方法使用 ClassCleanupAttribute 或 ClassInitializeAttribute 属性。同样,请勿在与 ASP.NET 单元测试相同的程序集中使用 AssemblyCleanupAttribute 或 AssemblyInitializeAttribute 属性。在这些情况下使用这些属性所产生的结果不具有确定性。不过,可以对所有单元测试使用 TestInitializeAttribute 和 TestCleanupAttribute 属性。 无论这些测试运行中包含的测试类型如何,都将在测试运行之前和之后分别运行安装脚本和清理脚本。有关与测试运行一起运行的脚本的更多信息,请参见测试部署概述和如何:指定测试运行配置。 生成 ASP.NET 单元测试 若要生成 ASP.NET 单元测试,首先要在 Visual Studio 解决方案中创建一个 ASP.NET 网站。然后向网站项目中添加一个类,最后从该类生成单元测试。 生成 ASP.NET 单元测试 1. 若要生成 ASP.NET 单元测试,首先请创建一个 ASP.NET 网站。为此,请右击解决方案,指向“添加”,再单击“新建网站”。 2. 在“添加新网站”对话框上单击“ASP.NET 网站”。 3. 在“位置”之下单击“文件系统”指示 ASP.NET Development Server。 4. 单击“确定”。 现在即生成一个新网站。 5. 向此项目中添加一个类。为此,请在“解决方案资源管理器”中右击该网站,再单击“添加新项”。 6. 在“添加新项”对话框中单击“类”,再单击“添加”。 7. 出现一个“Microsoft Visual Studio”对话框,询问是否要在 App_Code 文件夹中放置新类。单击“是”。 注意 不能从 .aspx 文件或 App_Code 之外的其他文件夹中的代码生成测试。 8. 生成一个 ASP.NET 单元测试。如果新类文件尚未打开,请在解决方案资源管理器中双击它以将其打开。 9. 在类文件中右击该类,再单击“创建单元测试”。 10. 随即出现“创建单元测试”对话框。有关如何使用此对话框生成单元测试的信息,请参见如何:生成单元测试。 11. 验证已选定要为其生成测试的类、方法或命名空间。 12. (可选)接受默认的“输出项目”或选择一个新项目。 13. 完成后单击“确定”。 新 ASP.NET 单元测试即添加到测试项目中的文件中。 若要查看该单元测试,请打开测试文件并滚动到末尾处。运行单元测试(作为 ASP.NET 单元测试)必需的属性均已自动指定。有关这些属性的更多信息,请参见下面的“配置 ASP.NET 单元测试”过程。 配置 ASP.NET 单元测试 可以将现有的单元测试配置为 ASP.NET 单元测试,方法为对特定测试的自定义属性赋值。可以在包含该单元测试的代码文件中设置这些值。 在设置自定义属性之前,首先应添加对支持自定义属性的命名空间的引用;此处为 Microsoft.VisualStudio.TestTools.UnitTesting.Web 命名空间。有了此引用,IntelliSense 就可以帮助您设置属性值。 注意   生成 ASP.NET 单元测试时,将自动设置这些属性。 配置 ASP.NET 单元测试 1. 打开包含该单元测试的代码文件。 2. 设置该单元测试的以下属性: [TestMethod] 由于所有单元测试都需要 [TestMethod] 属性,因此应事先设置此属性。 [UrlToTest()] 此为运行此单元测试时所测试的 URL;例如 [UrlToTest(“http://localhost/WebSites/Default.aspx”)] [HostType()] 使用 [HostType(“ASP.NET”)]。测试通常在 VSTest 宿主进程下运行,但 ASP.NET 单元测试必须在 ASP.NET 宿主进程下运行。 示例 示例 1. 如果使用 ASP.NET Development Server 运行网站,则为 ASP.NET 单元测试设置的属性和值与以下类似: [TestMethod()] [HostType("ASP.NET")] [UrlToTest("http://localhost:25153/WebSite1")] [AspNetDevelopmentServerHost("D:\\Documents and Settings\\user name\\My Documents\\Visual Studio 2005\\WebSites\\WebSite1", "/WebSite1")] 示例 2. 若要测试在 IIS 下运行的网站,请仅使用 TestMethod、HostType 和 UrlToTest 属性: [TestMethod()] [HostType("ASP.NET")] [UrlToTest("http://localhost:25153/WebSite1")] 使用运行配置对 ASP.NET 单元测试进行配置 可以在运行配置中指定与 ASP.NET 单元测试所用的属性对应的设置。在运行配置中指定了这些属性之后,只要该运行配置为活动状态,就会在运行任何 ASP.NET 单元测试时应用这些设置。 注意 只有一组 ASP.NET 单元测试设置有效:运行配置设置或属性设置,但永远都不可能是两者的组合。运行配置设置优先于属性(如果存在)。也就是说,即使在运行配置中只指定了一个 ASP.NET 设置,也将忽略任何指定为属性的 ASP.NET 设置。 使用运行配置对 ASP.NET 单元测试进行配置 1. 打开一个运行配置文件。有关更多信息,请参见如何:指定测试运行配置。 2. 在“主机”页上,将“主机类型”设置为 ASP.NET。 这将显示一些其他选择,其中有些选择与可在代码中指定的属性对应,如“要测试的 Url”。前面的“配置 ASP.NET 单元测试”过程中对这些属性进行了描述。 完成“主机”页上值的设置后单击“保存”,再单击“确定”。 如何:在 ASP.NET 解决方案中运行测试时进行调试 Visual Studio 2005 · Visual Studio 2010 · Visual Studio 2008 您可以调试用于测试 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 的版本。下表显示了在每个操作系统上使用的进程。对于第一列中的操作系统,使用在“附加到进程”对话框的“可用进程”部分的第三列中指定的进程名称。 操作系统 宿主进程 ASP.NET 进程名称 Windows Server 2003 IIS 6.0 w3wp.exe Windows XP IIS 5.1 aspnet_wp.exe Windows 2000 IIS 5.0 aspnet_wp.exe 在 IIS 上运行 ASP.NET 测试时进行调试 1. 创建您要测试的 ASP.NET 网站项目以及用来测试该项目的 ASP.NET 单元测试。 在创建该网站项目时,请在“新建网站”对话框的“位置”中选择“HTTP”或“FTP”。这样可保证宿主进程将是 IIS。 有关更多信息,请参见如何:创建 ASP.NET 单元测试。 2. 在 ASP.NET Web 项目中启用调试。为此,请编辑项目的 Web 配置文件。如果您的项目已经有一个 Web.config 文件,请转到步骤 4。否则,请现在添加一个:在解决方案中右击网站项目,然后单击“添加新项”。 显示“添加新项”对话框。 3. 在“添加新项”对话框中,单击“Web 配置文件”,然后单击“添加”。 Web.config 文件随即添加到网站项目中。有关使用 Web.config 文件的更多信息,请参见如何:为 ASP.NET 应用程序启用调试。 4. 在 Web.config 文件中,将内容为 的行更改为 。 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。 有关更多信息,请参见如何:创建 ASP.NET 单元测试。 2. 在 ASP.NET Web 项目中启用调试。为此,请编辑项目的 Web 配置文件。如果您的项目已经有一个 Web.config 文件,请转到步骤 4。否则,请现在添加一个:在解决方案中右击网站项目,然后单击“添加新项”。 显示“添加新项”对话框。 3. 在“添加新项”对话框中,单击“Web 配置文件”,然后单击“添加”。 Web.config 文件随即添加到网站项目中。有关使用 Web.config 文件的更多信息,请参见如何:为 ASP.NET 应用程序启用调试。 4. 在 Web.config 文件中,将内容为 的行更改为 。 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() 语句。否则,每次运行测试时,都会出现断点对话框。

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 7 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档