다음을 통해 공유


웹 서비스 테스트

업데이트: 2007년 11월

단위 테스트에서 웹 메서드를 호출하여 웹 서비스를 테스트할 수 있습니다. 웹 서비스 테스트는 Asset 문을 사용할 수 있다는 점과 테스트가 동일한 결과 범위를 생성한다는 점에서 단위 테스트를 사용하여 다른 코드를 테스트하는 것과 매우 유사합니다. 그러나 Visual Studio Team System Test Edition의 Microsoft.VisualStudio.TestTools.UnitTesting.Web 네임스페이스는 특히 웹 서비스 테스트에 대한 특성 및 메서드를 제공합니다. 이러한 항목은 로컬로 웹 서비스 테스트에서 설명합니다.

다음 목록에서는 단위 테스트를 사용하여 웹 서비스를 테스트하는 두 가지 방법을 설명합니다.

  • 활성 웹 서버에서 웹 서비스를 실행합니다. IIS와 같은 원격 웹 서버나 로컬 웹 서버에서 실행되는 웹 서비스를 테스트하는 데 특별히 필요한 요구 사항은 없습니다. 웹 서비스를 테스트하려면 웹 참조를 추가한 다음, 웹 서비스가 아닌 프로그램의 메서드를 호출하는 것처럼 사용자 단위 테스트에서 웹 서비스의 웹 메서드를 호출합니다. 웹 참조를 추가하는 방법에 대한 자세한 내용은 웹 참조 추가 대화 상자를 참조하십시오. 단위 테스트를 만드는 방법에 대한 자세한 내용은 방법: 단위 테스트 생성방법: 단위 테스트 작성을 참조하십시오. 웹 테스트를 사용하여 웹 서비스를 테스트하는 방법에 대한 자세한 내용은 방법: 웹 서비스 테스트 만들기를 참조하십시오.

  • 웹 서비스는 활성 웹 서버에서 호스팅되지 않습니다. 로컬로 웹 서비스 테스트에 설명된 것처럼 IIS와 같은 웹 서버가 아닌 로컬 컴퓨터에서 실행되는 웹 서비스를 테스트할 수 있습니다. 이렇게 하려면 Team System 테스트 도구에서 제공하는 특성을 사용하여 ASP.NET Development Server를 시작합니다. 그러면 테스트 중인 웹 서비스를 호스팅하는 로컬 호스트에 임시 서버가 만들어집니다. ASP.NET Development Server에 대한 자세한 내용은 Visual Web Developer의 웹 서버를 참조하십시오.

로컬로 웹 서비스 테스트

이 테스트는 IIS가 아닌 로컬 컴퓨터에서 실행되는 웹 서비스를 테스트하는 절차입니다.

  1. 로컬 파일 시스템에 웹 서비스를 만듭니다. 자세한 내용은 연습: Visual Basic 또는 Visual C#을 사용하여 웹 서비스 만들기를 참조하십시오.

  2. 단위 테스트를 생성하는 일반적인 방법으로 웹 서비스에 대한 단위 테스트를 생성합니다. 자세한 내용은 방법: 단위 테스트 생성을 참조하십시오.

  3. 단위 테스트에 AspNetDevelopmentServerAttribute 특성을 추가합니다. 이 특성 클래스에 대한 인수는 웹 서비스의 사이트를 가리키며 서버 이름을 지정합니다. 자세한 내용은 ASP.NET Development Server에 대한 액세스 보장을 참조하십시오.

  4. 단위 테스트 내에서 TryUrlRedirection 메서드에 대한 호출을 추가하여 웹 서비스 개체가 올바른 서버를 가리키게 합니다. 이 메서드 호출이 true를 반환하는지를 확인한 다음, Assert 문을 사용하여 리디렉션이 실패하면 테스트가 실패하도록 합니다. 자세한 내용은 TryUrlRedirection 메서드 사용을 참조하십시오.

  5. 웹 서비스를 호출하거나 웹 서비스를 철저하게 테스트하는 데 필요하다고 판단되는 다른 방법으로 웹 서비스를 실행합니다. 이 작업의 예제를 보려면 웹 서비스 테스트 메서드 예제를 참조하십시오.

ASP.NET Development Server에 대한 액세스 보장

웹 서비스 사이트가 로컬 파일 시스템에 있는 경우 이 사이트는 ASP.NET Development Server를 사용하며 IIS 사이트가 아닙니다. 이 경우 단위 테스트를 생성하는 첫 번째 과정으로 웹 서비스에 대한 ASP.NET Development Server를 시작하고 테스트 프로젝트에 웹 참조를 추가합니다.

ASP.NET Development Server는 임시 서버이므로 이 서버가 중지되면 웹 참조가 실패합니다. Team System 테스트 도구에서는 이 문제를 해결하기 위해 AspNetDevelopmentServer 특성을 제공합니다. 이 특성 클래스에는 다음과 같은 두 가지 생성자가 있습니다.

AspNetDevelopmentServerAttribute(string name, string pathToWebApp)
AspNetDevelopmentServerAttribute(string name, string pathToWebApp, string webAppRoot)

이 특성에는 다음과 같은 매개 변수가 사용됩니다.

  • name은 서버와 연결된 사용자 정의 이름입니다.

  • pathToWebApp는 테스트 중인 웹 사이트에 대한 디스크상의 경로입니다.

  • webAppRoot는 서버에 사이트가 표시되는 가상 경로입니다. 예를 들어, webAppRoot가 /WebSite1로 설정된 경우 사이트에 대한 경로는 https://localhost:<port>/WebSite1입니다. 첫 번째 생성자의 경우 기본값은 https://localhost:<port>/입니다.

참고:

pathToWebApp 및 webAppRoot 매개 변수는 ASP.NET 단위 테스트에 사용되는 AspNetDevelopmentServerHost 특성에 대해 사용되는 것과 같은 방식으로 AspNetDevelopmentServerAttribute와 함께 사용됩니다.

AspNetDevelopmentServerAttribute 특성으로 테스트를 표시할 경우 해당 테스트가 실행될 때마다 ASP.NET Development Server가 시작됩니다. 테스트 중인 사이트의 URL을 포함하는 항목이 해당 테스트 클래스의 TestContext.Properties에 추가됩니다. 이 항목에 대한 키는 AspNetDevelopmentServer.<name>이며, 여기서

<name>은 특성의 name 인수에 들어 있는 값입니다. 이러한 메커니즘은 테스트가 실행될 때 ASP.NET Development Server에서 웹 서비스를 항상 사용할 수 있고 런타임에 URL을 알 수 있게 해줍니다.

이 방법으로 웹 서비스를 테스트하려면 단위 테스트를 생성하거나 단위 테스트를 직접 작성하고 이 특성으로 표시합니다. 단위 테스트를 직접 작성하려면 사용자 단위 테스트의 코드에서 웹 서비스의 유형을 참조할 수 있도록 적절한 웹 참조가 있어야 합니다. 웹 참조를 추가하려면 먼저 웹 서비스 프로젝트를 마우스 오른쪽 단추로 클릭한 다음 브라우저에서 보기를 선택하여 ASP.NET Development Server를 시작해야 합니다.

TryUrlRedirection 메서드 사용

웹 참조가 있으면 테스트 코드에서 웹 서비스 개체의 인스턴스를 만들 수 있습니다. 그러나 해당 참조가 더 이상 실행되지 않는 ASP.NET Development Server 인스턴스의 URL을 가리키기 때문에 런타임에 오류가 발생할 수 있습니다. 이 문제를 해결하려면 TryUrlRedirection 메서드를 사용하여 특히 단위 테스트를 실행하기 위해 시작된 ASP.NET Development Server를 가리키도록 웹 서비스 개체를 수정합니다.

TryUrlRedirection은 리디렉션 성공 여부를 나타내는 부울을 반환하는 WebServiceHelper 클래스의 정적 메서드입니다.

bool TryUrlRedirection(System.Web.Protocols.WebClientProtocol client, TestContext context, string identifier)

TryUrlRedirection은 다음 세 가지 인수를 사용합니다.

  • client는 리디렉션될 웹 서비스 개체입니다.

  • context는 클래스에 대한 TestContext 개체입니다.

  • identifier는 웹 서비스 개체가 리디렉션되는 서버에 대한 사용자 정의 이름입니다.

이 메서드를 호출한 다음 이 호출이 성공하면 웹 서비스 개체의 웹 메서드를 호출할 수 있습니다. 이러한 방법으로 단위 테스트를 시작할 때 시작된 ASP.NET Development Server를 통해 웹 서비스에 액세스합니다. 서버 이름을 서로 다르게 지정한 경우 단일 단위 테스트에서 여러 개의 AspNetDevelopmentServer 특성을 사용하여 여러 서버를 시작할 수 있습니다.

단위 테스트 생성 시 AspNetDevelopmentServer 특성이나 TryUrlRedirection 메서드 호출은 자동으로 추가되지 않습니다. 이러한 엔터티는 직접 추가해야 합니다. 특성과 메서드는 모두 Microsoft.VisualStudio.TestTools.UnitTesting.Web에 들어 있으므로 다음 예제와 같이 using 또는 Imports 문이 필요합니다.

웹 서비스 테스트 메서드 예제

다음은 웹 서비스의 HelloWorld() 웹 메서드를 테스트하는 간단한 테스트 메서드입니다.

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

[TestMethod]
[AspNetDevelopmentServer("HelloWorldServer", @"C:\Documents and Settings\user\My Documents\Visual Studio 2005\WebSites\WebSite1")]
public void HelloWorldTest()
{
     HelloWorldService target = new HelloWorldService();

     Assert.IsTrue( WebServiceHelper.TryUrlRedirection
                         (
                          target,
                          testContextInstance,
                          "HelloWorldServer"
                         ),
                   "Web service redirection failed."
                   );

     string expected = "Hello World";
     string actual;

     actual = target.HelloWorld();

     Assert.AreEqual(
                     expected,
                     actual,
                     "TestProject1.localhost.HelloWorldService.HelloWorld did not return the expected value."
                     );
}

참고 항목

작업

방법: 단위 테스트 작성

방법: 웹 서버 매개 변수화

개념

Visual Web Developer의 웹 서버

참조

Microsoft.VisualStudio.TestTools.UnitTesting.Web

AspNetDevelopmentServerAttribute

TryUrlRedirection

기타 리소스

방법: 단위 테스트 생성