在团队环境中测试网站和 Web 服务

更新:2007 年 11 月

首次测试网站时,您通常会在自己的计算机上进行测试。不过您可能还想与团队成员共享这些测试。或者,在比较正规的环境中,有时候会在项目中将成品代码和测试签入源代码管理中,然后编译实验室将使用这些测试对您的代码进行测试。在以上每种方案中,单元测试都必须能识别它们正在测试的网站,无论该网站是否位于本地计算机上。若要使测试引擎识别网站,请使用变量 %PathToWebRoot%,本主题以下部分将对此进行介绍。

服务器选择

如果您正在开发网站或 Web 服务,则可以使用 ASP.NET Development Server 或类似 IIS 的 Web 服务器来运行它。此选择还确定了网站或 Web 服务的测试方式,如以下部分所述:

  • 使用 ASP.NET Development Server 测试 Web 服务

  • 使用 ASP.NET Development Server 测试网站

相关测试:更多信息

可以使用单元测试来测试 Web 服务的 Web 方法,如测试 Web 服务中所述。还可以使用单元测试来测试网站的业务逻辑,如 ASP.NET 单元测试概述中所述。此外,可以使用 Web 测试来测试网页,使用 Web 测试中对此进行了介绍。

使用 ASP.NET Development Server 测试 Web 服务

若要使用 ASP.NET Development Server 在本地文件系统上测试 Web 服务,请以 AspNetDevelopmentServer 属性标记单元测试方法。为标识网站位置,您在 AspNetDevelopmentServer 属性的参数中指定其根目录的路径。为此,请使用 %PathToWebRoot% 变量,如设置 pathToWebRoot 中所述。有关更多信息,请参见测试 Web 服务

有关 AspNetDevelopmentServer 属性的使用和语法的更多信息,请参见 AspNetDevelopmentServerAttribute测试 Web 服务

使用 ASP.NET Development Server 测试网站

当您生成 ASP.NET 单元测试以在计算机的文件系统上测试网站时,该测试将用 AspNetDevelopmentServerHost 属性进行标记。此属性需要 pathToWebApp 参数。默认情况下,生成的 ASP.NET 单元测试在 pathToWebApp 参数中包含 %PathToWebRoot% 变量。此变量的值的设置方法在设置 pathToWebRoot 中介绍。有关如何使用 ASP.NET Development Server 测试网站的更多信息,请参见 ASP.NET 单元测试概述

有关 AspNetDevelopmentServerHost 属性的使用和语法的更多信息,请参见 AspNetDevelopmentServerHostAttributeASP.NET 单元测试概述

设置 pathToWebRoot

在将用来测试运行于 ASP.NET Development Server 上的网站或 Web 服务的每一个单元测试中,应该在 AspNetDevelopmentServer 或 AspNetDevelopmentServerHost 属性的 pathToWebApp 参数中指定字符串 %pathtowebroot%\\<网站名称>。请按以下说明指定参数:

  • 使用原义字符串 %PathToWebRoot%。即使您当前只在自己的计算机上运行测试,也要使用此字符串。这使您的测试得到了能与其他用户共享并在 Team Foundation Build 中运行的灵活性。

    说明:

    当您在自己的计算机上测试多个网站,并且这些网站不共享同一个根目录时,您可能想在每个测试中硬编码网站路径,而不是使用 %PathToWebRoot% 变量。重要事项:只有在进行本地测试的情况下才应对此路径进行硬编码,因为硬编码会阻止您更广泛地共享对此网站的测试。在其他团队成员测试网站之前,请记住更改路径以包括 %PathToWebRoot% 变量,或在 Team Foundation Build 中更改。

  • <网站名称> 是要测试的网站的名称。请键入与解决方案资源管理器中显示的网站名称完全相同的字符串。

有关 pathToWebApp 参数的使用示例,请参见示例测试方法。

设置 %PathToWebRoot% 的值

%PathToWebRoot% 变量在不同的环境中通过不同的方式获得值。以下列出了两种情况:

  • 在 Team Foundation Build 中设置 %PathToWebRoot%

  • 在其他共享环境中设置 %PathToWebRoot%

在 Team Foundation Build 中设置 %PathToWebRoot%

当用在 Team Foundation Build 中时,%PathToWebRoot% 变量的值派生自生成类型中的信息,并由 Team Foundation Build 自动设置。

例如,如果在“网站1”的“发布”版本上为 x86 平台运行测试,则 PathToWeb 的值设置为:

<build directory>/binaries/x86/Release/_precompiled/WebSite1

在其他共享环境中设置 %PathToWebRoot%

对于用在 Team Foundation Build 中之外的其他所有情况,%PathToWebRoot% 变量的值按照如下方式设置。当测试运行时,系统将在以下一个或多个位置搜索 %PathToWebRoot% 变量的值:

  • 新的网站项目的默认位置。默认情况下,系统使用 Visual Studio 创建新网站项目所在位置的路径。此路径的默认值为 <drive>:\Documents and Settings\<user name>\My Documents\Visual Studio 2005\WebSites\

  • PathToWebRoot 环境变量。如果您在运行测试的计算机上定义了此环境变量,则将使用该变量的值,并且该值重写新网站项目默认位置的任何值。

  • Web 应用程序根目录的值。若要设置此值,请单击“工具”,然后单击“选项”,展开“测试工具”,然后单击“测试执行”。如果您已设置了此值,则此值将重写 PathToWebRoot 环境变量和新网站项目默认位置的任何值。

示例测试方法

下面的测试 Web 服务的测试方法用 AspNetDevelopmentServer 属性进行了标记。AspNetDevelopmentServer 属性需要 pathToWebApp 参数。%PathToWebRoot% 变量在 pathToWebApp 参数中的用法在下例中以粗体指示。

using Microsoft.VisualStudio.TestTools.UnitTesting;
using Microsoft.VisualStudio.TestTools.UnitTesting.Web;
using TestProject1.localhost;

[TestMethod]
[AspNetDevelopmentServer("HelloWorldServer", "%PathToWebRoot%\\WebSite1")]

public void HelloWorldTest()
{
    HelloWorldService target = new HelloWorldService();

    WebServiceHelper.TryUrlRedirection(
                                       target, 
                                       TestContext,
                                       "HelloWorldServer"
                                       );

    string expected = "Hello World";
    string actual;

    actual = target.HelloWorld();

    Assert.AreEqual(
                    expected, 
                    actual,

"TestProject1.localhost.HelloWorldService.HelloWorld did not return the expected value."
                    );
}

请参见

任务

如何:创作单元测试

如何:参数化 Web 服务器

概念

Visual Web Developer 中的 Web 服务器

ASP.NET 单元测试概述

参考

Microsoft.VisualStudio.TestTools.UnitTesting.Web

AspNetDevelopmentServerAttribute

AspNetDevelopmentServerHostAttribute

其他资源

测试 Web 服务

如何:生成单元测试