Asp.Net의 단위 테스트: 전체 튜토리얼

⚡ 스마트 요약

Visual Studio에서 ASP.NET 애플리케이션의 단위 테스트를 시작하려면 단위 테스트 프로젝트를 생성하고, 대상 프로젝트에 대한 참조를 연결하고, MSTest [TestClass] 및 [TestMethod] 특성을 추가하고, Assert 메서드를 호출하여 클래스가 설계대로 동작하는지 확인합니다.

  • 🧪 테스트 프로젝트: ASP.NET 솔루션에 단위 테스트 프로젝트를 추가하고 검증하려는 대상 프로젝트를 참조하십시오.
  • 🏷️ 속성 : MSTest가 테스트 메서드를 찾을 수 있도록 클래스에는 [TestClass]를, 각 테스트에는 [TestMethod]를 표시하세요.
  • 주장: Assert.AreEqual, Assert.IsTrue 등의 호출을 사용하여 각 테스트의 예상 결과를 명시하십시오.
  • 테스트 실행: Visual Studio 내에서 테스트 실행 메뉴를 클릭하고 테스트 탐색기에서 통과 및 실패 결과를 확인하십시오.
  • ⚖️ 프레임워크 선택: MSTest, NUnit, 및 xUnit은 모두 dotnet test와 함께 작동합니다. MSTest는 기본적으로 제공되며, xUnit은 ASP.NET Core에서 권장됩니다.
  • 🛠️ 최고의 연습: 해당 유닛을 격리하고, Arrange Act Assert 규칙을 따르며, 전체 테스트 스위트가 모든 커밋에서 실행될 수 있도록 빠른 속도를 유지하십시오.

ASP.NET에서의 단위 테스트

테스트는 모든 프로그래밍 언어의 필수적인 측면입니다. 지원 Visual Studio를 사용하면 ASP.NET 애플리케이션 개발이 가능합니다.

Visual Studio는 테스트 코드를 작성하고 ASP.NET 애플리케이션의 테스트 코드를 실행하는 데 사용됩니다. 이를 통해 ASP.NET 애플리케이션의 오류를 쉽게 확인할 수 있습니다. Visual Studio에는 테스트 모듈이 기본적으로 제공되므로 ASP.NET 프로젝트에 대한 테스트를 바로 수행할 수 있습니다.

ASP.NET 테스트 소개

ASP.NET 프로젝트 테스트의 첫 번째 단계는 단위 테스트입니다. 이 테스트는 애플리케이션의 기능을 검증하는 것입니다. 테스트는 애플리케이션이 예상대로 작동하는지 확인하기 위해 수행됩니다. ASP.NET에서 가장 먼저 해야 할 일은 Visual Studio에서 테스트 프로젝트를 생성하는 것입니다. 테스트 프로젝트에는 애플리케이션 테스트에 필요한 코드가 포함됩니다.

아래 웹페이지를 살펴보겠습니다. 이 페이지에는 다음과 같은 메시지가 있습니다.Guru"99 – ASP.NET"이라는 메시지가 표시됩니다. 이제 ASP.NET 프로젝트 실행 시 올바른 메시지가 표시되는지 어떻게 확인할 수 있을까요? 웹 기반 애플리케이션 개발에 사용되는 ASP.NET 솔루션에 테스트 프로젝트를 추가하면 됩니다. 이 테스트 프로젝트를 통해 사용자에게 올바른 메시지가 표시되는지 확인할 수 있습니다.

ASP.NET 테스트 소개

이제 좀 더 자세히 살펴보고 ASP.NET에서 테스트를 어떻게 진행할 수 있는지 알아보겠습니다.

.NET 단위 테스트 프로젝트 만들기

테스트 프로젝트를 만들기 전에 아래의 상위 수준 단계를 수행해야 합니다.

  1. 이전 섹션에서 사용한 'DemoApplication'을 사용하세요. 이것이 테스트가 필요한 애플리케이션이 될 것입니다.
  2. 데모 애플리케이션에 새 클래스를 추가하겠습니다. 이 클래스에는 '라는 이름의 문자열이 포함될 것입니다.Guru'99 – ASP.NET.' 이 문자열은 저희 테스트 프로젝트에서 테스트될 것입니다.
  3. 마지막으로 테스트 프로젝트를 생성하겠습니다. 이 프로젝트는 ASP.NET 애플리케이션을 테스트하는 데 사용됩니다.

그럼 위에서 설명한 개략적인 단계를 따라 테스트를 구현하는 방법을 살펴보겠습니다.

단계 1) Visual Studio에서 DemoApplication이 열려 있는지 확인하세요.

단계 2) 이제 DemoApplication에 새 클래스를 추가해 보겠습니다. 이 클래스에는 '라는 이름의 문자열이 포함될 것입니다.Guru'99 – ASP.NET.' 이 문자열은 저희 테스트 프로젝트에서 테스트될 것입니다.

새 클래스를 추가하려면 아래 단계를 따르세요.

.NET 단위 테스트 프로젝트 만들기

  1. Visual Studio의 솔루션 탐색기에서 'DemoApplication'을 마우스 오른쪽 버튼으로 클릭합니다.
  2. 상황에 맞는 메뉴에서 추가->클래스 옵션을 선택합니다.

단계 3) 이 단계에서,

.NET 단위 테스트 프로젝트 만들기

  1. 새 클래스의 이름을 'Tutorial.cs'로 지정합니다.
  2. DemoApplication에 파일을 추가하려면 '추가' 버튼을 클릭하세요.

이제 “DemoApplication” 파일에 새 클래스가 추가되었습니다.

단계 4) “DemoApplication” 폴더에서 새로 생성된 Tutorial.cs 파일을 엽니다. 문자열을 추가합니다.Guru99 – ASP.NET.”

파일을 열려면 솔루션 탐색기에서 Tutorial.cs 파일을 두 번 클릭합니다.

.NET 단위 테스트 프로젝트 만들기

파일에는 이미 작성된 일부 기본 코드가 있습니다. 해당 코드에 대해 신경쓰지 말고 아래 코드 줄을 추가하기만 하면 됩니다.

.NET 단위 테스트 프로젝트 만들기

namespace DemoApplication
{
  public class Tutorial
  {
     public String Name;
     public Tutorial()
     {
        Name = "Guru99 - ASP.Net";
     }
  }
}

Code 설명:-

  1. Name 변수는 문자열 유형입니다.
  2. 마지막으로 Tutorial 클래스의 생성자에서 Name 변수에 값을 할당합니다. 값은 "로 할당됩니다.Guru99 – ASP.NET”

단계 5) 이제 demo.aspx 파일로 이동하여 " 텍스트를 표시하는 코드 줄을 추가하세요.Guru99 – ASP.NET.”

.NET 단위 테스트 프로젝트 만들기

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
    <body>
    <form id="form1" runat="server">
    <div>
        <% DemoApplication.Tutorial tp=new DemoApplication.Tutorial();%>
        <%=tp.Name%>
    </div>
    </form>
    </body>
</html>

Code 설명:-

  1. 첫 번째 줄은 'Tutorial' 클래스의 객체를 생성합니다. 이는 클래스와 객체를 다룰 때의 첫 번째 단계입니다. 객체에는 'tp'라는 이름이 지정됩니다.
  2. 마지막으로 데모.aspx 파일에서 'tutorial.cs'를 호출합니다. Name 변수의 값을 표시합니다.

위 프로그램을 Visual Studio에서 실행하면 다음과 같은 출력이 표시됩니다.

산출:-

.NET 단위 테스트 프로젝트 만들기

출력 결과에서 다음과 같은 메시지를 확인할 수 있습니다.Guru99 – ASP.NET”이 표시되었습니다.

단계 6) 이제 데모 애플리케이션에 테스트 프로젝트를 추가해 보겠습니다. 이 작업은 Visual Studio를 사용하여 수행합니다.

.NET 단위 테스트 프로젝트 만들기

  1. 솔루션 – DemoApplication을 마우스 오른쪽 버튼으로 클릭합니다.
  2. 상황에 맞는 메뉴에서 '새 프로젝트' 옵션을 선택합니다.

단계 7) 이 단계에는 데모 애플리케이션에 단위 테스트 프로젝트를 추가하는 작업이 포함됩니다.

.NET 단위 테스트 프로젝트 만들기

  1. 왼쪽 패널에서 항목 유형을 '테스트'로 클릭합니다.
  2. 대화 상자의 중앙에 나타나는 목록에서 '단위 테스트 프로젝트'로 항목을 선택합니다.
  3. 테스트 프로젝트의 이름을 지정하십시오. 우리의 경우 주어진 이름은 'DemoTest'입니다.
  4. 마지막으로 '확인' 버튼을 클릭하세요.

결국에는 솔루션 탐색기에 DemoTest 프로젝트가 추가된 것을 볼 수 있습니다. 이를 통해 UnitTest1.cs, 속성 등과 같은 다른 파일이 기본적으로 생성되는 것을 볼 수도 있습니다.

.NET 단위 테스트 프로젝트 만들기

테스트 프로젝트 실행

이전 섹션에서 생성한 테스트 프로젝트는 ASP.NET 애플리케이션을 테스트하는 데 사용됩니다. 다음 단계에서는 테스트 프로젝트를 실행하는 방법을 살펴보겠습니다.

  • 첫 번째 단계는 ASP.NET 프로젝트에 대한 참조를 추가하는 것입니다. 이 단계는 테스트 프로젝트가 ASP.NET 프로젝트에 접근할 수 있도록 하기 위해 수행됩니다.
  • 그런 다음 테스트 코드를 작성하겠습니다.
  • 마지막으로 Visual Studio를 사용하여 테스트를 실행해 보겠습니다.

단계 1) 데모 애플리케이션을 테스트하려면 먼저 테스트 프로젝트에서 데모 애플리케이션을 참조해야 합니다. Demo.aspx 솔루션에 대한 참조를 추가합니다.

.NET 테스트 프로젝트 실행

  1. 데모 테스트 프로젝트를 마우스 오른쪽 버튼으로 클릭하세요.
  2. 메뉴에서 추가->참조 옵션을 선택합니다.

단계 2) 다음 단계는 DemoApplication에 대한 참조를 추가하는 것입니다.

.NET 테스트 프로젝트 실행

  1. 대화 상자의 왼쪽에서 프로젝트 옵션을 선택하세요
  2. DemoApplication 옆에 있는 확인란을 클릭하세요.
  3. '확인' 버튼을 클릭하세요.

이를 통해 데모 테스트 프로젝트에서 DemoApplication을 테스트할 수 있습니다.

단계 3) 이제 테스트 프로젝트에 테스트 코드를 추가할 차례입니다.

  • 먼저 솔루션 탐색기에서 UnitTest1 파일을 두 번 클릭합니다.(UnitTest1 파일은 테스트 프로젝트가 생성될 때 Visual Studio에서 자동으로 추가됩니다.)
  • 이 파일은 ASP.NET 프로젝트를 테스트하기 위해 실행될 파일입니다.

.NET 테스트 프로젝트 실행

Visual Studio에서 UnitTest1.cs 파일에 추가한 아래 코드를 볼 수 있습니다. 이는 테스트 프로젝트를 실행하는 데 필요한 기본 코드입니다.

.NET 테스트 프로젝트 실행

단계 4) 다음 단계는 문자열 "을 테스트하는 데 사용되는 코드를 추가하는 것입니다.Guru99 – ASP.NET.”

.NET 테스트 프로젝트 실행

using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using DemoApplication;

namespace DemoTest
{
 [TestClass]
 public class UnitTest1
 {
   [TestMethod]
   public void TestMethod1()
   {
      Tutorial tp = new Tutorial();
      Assert.AreEqual(tp.Name,"Guru99 - ASP.Net");
   }
 }
}
  1. Tutorial 유형의 'tp'라는 새 개체를 만듭니다.
  2. Assert.AreEqual 메서드는 .NET에서 값이 어떤 값과 같은지 테스트하는 데 사용됩니다. 따라서 이 경우 tp.Name의 값을 비교하는 것입니다. Guru99 – ASP.NET.

단계 5) 이제 테스트 프로젝트를 실행해 보겠습니다. 이를 위해 메뉴에서 테스트->실행->모든 테스트를 선택해야 합니다.

.NET 테스트 프로젝트 실행

산출:-

.NET 테스트 프로젝트 실행

Visual Studio에 테스트 탐색기 창이 나타납니다. 여기에는 위의 결과가 표시되고 Visual Studio에서 성공적인 테스트가 실행되었음을 표시합니다.

MSTest에서 사용하게 될 속성 및 어설션

The Microsoft`.VisualStudio.TestTools.UnitTesting` 네임스페이스에는 대부분의 ASP.NET 단위 테스트를 다루는 몇 가지 속성과 어설션이 포함되어 있습니다. 이러한 것들을 먼저 익히면 나중에 작성하는 모든 테스트를 더 쉽게 읽고 유지 관리할 수 있습니다.

  • [테스트 클래스] - 해당 클래스를 테스트 컨테이너로 표시합니다. MSTest는 검색 시점에 이 속성을 가진 클래스를 스캔합니다.
  • [테스트 방법] - 매개변수가 없는 공개 메서드를 개별 테스트로 표시합니다. 이 메서드는 void, Task 또는 ValueTask를 반환합니다.
  • [테스트 초기화] / [테스트 정리] 각 테스트 메서드 실행 전후에 실행하세요. 이를 사용하여 모의 저장소 또는 메모리 컨텍스트와 같은 공유 설정 환경을 생성하고 해제할 수 있습니다.
  • [클래스 초기화] / [클래스 정리] - 전체 수업에 대해 한 번만 실행합니다. 예를 들어 테스트 데이터베이스를 초기화하는 등 설정 비용이 많이 드는 경우에 유용합니다.
  • [DataRow] 및 [DataTestMethod] - 매개변수화된 입력값을 제공하여 단일 테스트 방법으로 여러 경우를 테스트할 수 있도록 합니다.

각 테스트 메서드 내부에서 Assert 클래스는 결과를 확인합니다. 일반적인 호출로는 값 비교를 위한 Assert.AreEqual, 부울 값을 위한 Assert.IsTrue 및 Assert.IsFalse, 참조를 위한 Assert.IsNull 및 Assert.IsNotNull, 그리고 예상되는 예외를 위한 Assert.ThrowsException 등이 있습니다. 모든 테스트는 Arrange, Act, Assert 패턴을 사용하여 구성하고, 설정, 호출 및 검증이 시각적으로 분리되도록 합니다. 이러한 구조는 실패하는 테스트를 쉽게 디버깅할 수 있도록 해줍니다. 실패하는 줄은 거의 항상 맨 아래에 있는 단 하나의 Assert이기 때문입니다.

ASP.NET 환경에서 MSTest, NUnit, xUnit 비교 분석

.NET 생태계에는 세 가지 테스트 프레임워크가 주로 사용됩니다. 각 프레임워크는 Visual Studio 내에서 실행되고 dotnet test와 통합되므로, 차이점은 주로 스타일, 커뮤니티 지원 및 기본 동작에 있습니다.

  • MST테스트 – 배송업체 Microsoft 또한 이 기능은 이 튜토리얼 초반에 사용된 Visual Studio 단위 테스트 프로젝트 템플릿에 사전 설치되어 있습니다. 팀이 Visual Studio에서 단위 테스트를 처음 접할 때 가장 안전한 기본 설정입니다. Microsoft 스택.
  • N 단위 – 세 개 중 가장 오래된 것으로, 원래는 다음에서 이식되었습니다. JUnit이 라이브러리는 풍부한 제약 조건 모델, TestCase 및 TestCaseSource를 통한 매개변수화된 테스트, 그리고 모든 .NET 버전에 걸친 완벽한 지원을 제공합니다.
  • xUnit.net ASP.NET Core 및 Entity Framework Core 팀에서 내부적으로 사용됩니다. SetUp 메서드를 생성자와 IDisposable로 대체하고, 동작당 하나의 테스트 클래스를 권장하며, [TestMethod] 대신 [Fact]와 [Theory]를 사용합니다.

세 가지 프레임워크 모두 속성을 통해 테스트를 검색하고, `dotnet test` 명령어를 통해 실행되며, CI 파이프라인에서 사용할 수 있는 `trx` 또는 `xUnit` XML 보고서를 생성합니다. Azure DevOps, GitHub Actions 및 Jenkins 직접 사용할 수 있습니다. 첫 번째 ASP.NET 프로젝트의 경우 MSTest를 사용하면 툴체인을 단순하게 유지할 수 있습니다. 더 풍부한 파라미터화를 원하거나 이미 ASP.NET Core를 사용하는 팀은 프레임워크와의 일관성을 위해 xUnit을 선택하는 경우가 많습니다.

ASP.NET 애플리케이션 단위 테스트를 위한 최고의 사례

몇 가지 습관을 잘 지키면 ASP.NET 프로젝트 수명 주기 동안 도구 모음을 빠르고 안정적이며 유용하게 유지할 수 있습니다.

  1. 메서드당 하나의 동작만 테스트하세요. 서로 관련 없는 여러 가지 사항을 검증하는 테스트는 여러 가지 이유로 실패하며 수정하는 데 시간이 더 오래 걸립니다.
  2. 의도에 따라 이름을 지정하세요. MethodUnderTest_Scenario_ExpectedResult와 같은 패턴을 사용하면 테스트 탐색기에서 클래스에 대한 읽기 쉬운 명세를 출력할 수 있습니다.
  3. 장치를 외부 시스템으로부터 격리하십시오. 파일, 네트워크 및 데이터베이스 호출을 인터페이스로 감싸고 가짜 또는 모의 객체로 교체하여 테스트가 실제 종속성에 접근하지 않도록 합니다.
  4. 테스트는 빠르게 진행하세요. 전체 유닛 테스트 스위트가 몇 초 안에 완료되도록 목표를 세우세요. 느린 테스트는 건너뛰게 되고, 건너뛴 테스트는 회귀 오류를 숨깁니다.
  5. 계획, 실행, 주장 순서로 진행하십시오. 세 개의 짧은 블록 사이에 빈 줄이 있으면 의도를 명확히 전달하고 오류가 있는 줄을 쉽게 찾을 수 있습니다.
  6. 모든 커밋에 대해 테스트를 실행합니다. CI 파이프라인에 dotnet 테스트를 연결하여 테스트 오류가 발생하면 배포 대신 병합을 차단합니다.ping 생산에.
  7. Trac코드 커버리지를 계산하되, 그 수치를 쫓아다니지는 마세요. 커버리지는 검증되지 않은 경로를 강조하지만, 단순히 숫자가 많다고 해서 품질이 보장되는 것은 아닙니다. Rev누락된 줄이 실제로 어떤 역할을 하는지 살펴보세요.

이러한 방법들을 함께 적용하면 위에서 구축한 DemoTest 프로젝트는 모든 푸시에서 회귀 오류를 잡아내고, 향후 개발자를 위해 동작을 문서화하며, ASP.NET 애플리케이션을 리팩토링할 때 확신을 주는 테스트 스위트의 기초가 됩니다.

자주 묻는 질문

예. GitHub Copilot은 [TestClass] 및 [TestMethod] 블록의 스캐폴딩, Arrange Act Assert 레이아웃 제안, 대상 메서드 시그니처로부터 매개변수화된 [DataRow] 테스트 케이스 생성 등의 기능을 제공합니다. Rev생성된 어설션을 프로덕션 환경에서 신뢰하기 전에 검토하십시오.

네. 머신러닝 기반 어시스턴트는 취약한 테스트를 표시하고, 더 나은 이름을 제안하며, [TestInitialize]에 속해야 하는 중복된 설정 부분을 강조 표시할 수 있습니다. 이러한 도구는 검토 시간을 단축시켜 주지만, 각 Assert의 정확성에 대한 책임은 여전히 ​​개발자에게 있습니다.

단위 테스트는 하나의 클래스 또는 메서드를 분리하고 해당 의존성을 모킹합니다. 통합 테스트는 여러 구성 요소를 함께 실행하며, 실제 데이터베이스나 웹 서버에 접근하는 경우가 많습니다. 단위 테스트는 몇 밀리초 만에 실행되지만, 통합 테스트는 시간이 더 오래 걸리더라도 연결 오류를 잡아낼 수 있습니다.

Visual Studio Enterprise에서 테스트 분석을 사용하세요. Code 모든 시험에 대한 커버리지. 다른 판본의 경우, 커버렛 N을 추가하세요.uGet 패키지를 설치하고 dotnet test –collect:”XPlat을 실행합니다. Code "보장 범위"를 생성하기 위해 Cobertura XML 보고서.

의존성을 인터페이스로 감싸고 생성자를 통해 주입하세요. 테스트에서는 Moq 또는 NSubstitute와 같은 라이브러리를 사용하여 만든 스텁 또는 모의 객체를 전달하여 테스트 대상 유닛이 실제 데이터베이스나 HTTP 엔드포인트에 접근하지 않도록 하세요.

테스트 프로젝트가 있는 폴더에서 `dotnet test` 명령을 실행하세요. 이 명령은 프로젝트를 빌드하고, 모든 테스트 메서드를 찾아서 실행한 다음 요약 결과를 출력합니다. GitHub Actions와 같은 CI 시스템은 워크플로 단계 내에서 동일한 명령을 호출합니다.

메서드에 [DataTestMethod]를 표시하고 입력 값과 예상 결과를 제공하는 하나 이상의 [DataRow] 속성을 추가하세요. 그러면 MSTest는 각 행마다 동일한 본문을 한 번씩 실행하여 테스트 탐색기에 각 테스트 사례별로 별도의 줄을 생성합니다.

다음 단계의 필수 동작을 설명하는 실패하는 테스트 메서드를 작성하고, 해당 메서드가 통과할 수 있도록 필요한 만큼의 프로덕션 코드를 추가한 다음, 리팩토링합니다. 이러한 레드 그린 리팩토링 과정을 반복하면 설계가 테스트에 의해 좌우되는 것이 아니라 테스트에 의해 좌우되도록 할 수 있습니다.

이 게시물을 요약하면 다음과 같습니다.