웹 서비스 테스트
업데이트: 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가 아닌 로컬 컴퓨터에서 실행되는 웹 서비스를 테스트하는 절차입니다.
로컬 파일 시스템에 웹 서비스를 만듭니다. 자세한 내용은 연습: Visual Basic 또는 Visual C#을 사용하여 웹 서비스 만들기를 참조하십시오.
단위 테스트를 생성하는 일반적인 방법으로 웹 서비스에 대한 단위 테스트를 생성합니다. 자세한 내용은 방법: 단위 테스트 생성을 참조하십시오.
단위 테스트에 AspNetDevelopmentServerAttribute 특성을 추가합니다. 이 특성 클래스에 대한 인수는 웹 서비스의 사이트를 가리키며 서버 이름을 지정합니다. 자세한 내용은 ASP.NET Development Server에 대한 액세스 보장을 참조하십시오.
단위 테스트 내에서 TryUrlRedirection 메서드에 대한 호출을 추가하여 웹 서비스 개체가 올바른 서버를 가리키게 합니다. 이 메서드 호출이 true를 반환하는지를 확인한 다음, Assert 문을 사용하여 리디렉션이 실패하면 테스트가 실패하도록 합니다. 자세한 내용은 TryUrlRedirection 메서드 사용을 참조하십시오.
웹 서비스를 호출하거나 웹 서비스를 철저하게 테스트하는 데 필요하다고 판단되는 다른 방법으로 웹 서비스를 실행합니다. 이 작업의 예제를 보려면 웹 서비스 테스트 메서드 예제를 참조하십시오.
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."
);
}
참고 항목
작업
개념
참조
Microsoft.VisualStudio.TestTools.UnitTesting.Web
AspNetDevelopmentServerAttribute