이 자습서에서는 단위 테스트 개념을 알아보기 위해 샘플 솔루션을 단계별로 빌드하는 대화형 환경을 안내합니다.
이 문서에서는 .NET Core 프로젝트를 테스트하는 방법에 대해 알아봅니다. ASP.NET Core 프로젝트를 테스트하는 경우 ASP.NET Core 통합 테스트를 참조하세요.
Prerequisites
- .NET 10 SDK 또는 이후 버전.
- 선택하는 텍스트 편집기 또는 코드 편집기입니다.
TUnit은 전적으로 Microsoft.Testing.Platform (MTP)에서 빌드되며 VSTest를 지원하지 않습니다. 이 자습서에서는 .NET 10 SDK가 필요한 dotnet test의 MTP 모드를 사용합니다.
원본 프로젝트 만들기
셸 창을 엽니다. 솔루션을 저장할 unit-testing-vb-tunit 이라는 디렉터리를 만듭니다. 이 새 디렉터리 내에서 다음 명령을 실행하여 클래스 라이브러리 및 테스트 프로젝트에 대한 새 솔루션 파일을 만듭니다.
dotnet new sln
다음으로, PrimeService 디렉터리를 만듭니다. 다음 개요는 지금까지의 파일 구조를 보여줍니다.
/unit-testing-vb-tunit
unit-testing-vb-tunit.slnx
/PrimeService
현재 디렉터리 PrimeService를 만들고 다음 명령을 실행하여 원본 프로젝트를 만듭니다.
dotnet new classlib -lang VB
Class1.vb 이름을 PrimeService.vb 바꿉니다.
PrimeService 클래스의 실패한 구현을 만듭니다.
Namespace Prime.Services
Public Class PrimeService
Public Function IsPrime(candidate As Integer) As Boolean
Throw New NotImplementedException("Please create a test first.")
End Function
End Class
End Namespace
디렉터리를 unit-testing-vb-tunit 디렉터리로 다시 돌아갑니다. 다음 명령을 실행하여 솔루션에 클래스 라이브러리 프로젝트를 추가합니다.
dotnet sln add ./PrimeService/PrimeService.vbproj
테스트 프로젝트 만들기
다음으로, PrimeService.Tests 디렉터리를 만듭니다. 다음 개요는 디렉터리 구조를 보여줍니다.
/unit-testing-vb-tunit
unit-testing-vb-tunit.slnx
/PrimeService
Source Files
PrimeService.vbproj
/PrimeService.Tests
TUnit 프로젝트 템플릿은 .NET SDK에 포함되지 않습니다. 다음 명령을 사용하여 설치합니다.
dotnet new install TUnit.Templates
PrimeService.Tests 디렉터리를 현재 디렉터리로 만들고 다음 명령을 사용하여 새 프로젝트를 만듭니다.
dotnet new TUnit -lang VB
Note
템플릿 짧은 이름은 대/소문자를 구분합니다.
TUnit이 아니라 tunit을 사용합니다.
dotnet new 명령은 TUnit을 테스트 라이브러리로 사용하는 테스트 프로젝트를 만듭니다. 생성된 PrimeService.Tests.vbproj 파일은 테스트 프레임워크, 어설션 라이브러리 및 MTP 테스트 실행기를 포함하는 TUnit 패키지를 참조하는 실행 파일이므로 프로젝트에 다른 테스트 패키지가 필요하지 않습니다.
템플릿은 샘플 테스트도 추가합니다. 이 자습서에서 자체 테스트로 이를 대체하므로 PrimeService.Tests 디렉터리에서 모든 .vb 파일 및 Data 디렉터리를 삭제합니다.
이제 PrimeService 클래스 라이브러리를 프로젝트에 다른 종속성으로 추가합니다.
dotnet reference add 명령을 사용합니다.
dotnet reference add ../PrimeService/PrimeService.vbproj
다음과 같은 최종 솔루션 레이아웃이 있습니다.
/unit-testing-vb-tunit
unit-testing-vb-tunit.slnx
/PrimeService
Source Files
PrimeService.vbproj
/PrimeService.Tests
Test Source Files
PrimeService.Tests.vbproj
unit-testing-vb-tunit 디렉터리에서 다음 명령을 실행합니다.
dotnet sln add ./PrimeService.Tests/PrimeService.Tests.vbproj
dotnet 테스트의 MTP 모드 구성
TUnit은 VSTest를 지원하지 않으므로 dotnet test MTP 모드에서 실행해야 합니다.
unit-testing-vb-tunit 디렉터리에서 다음 콘텐츠를 사용하여 global.json 파일을 만듭니다.
{
"test": {
"runner": "Microsoft.Testing.Platform"
}
}
자세한 내용은 dotnet 테스트의 MTP 모드를 참조하세요.
첫 번째 테스트 만들기
실패한 테스트 하나를 작성하고 통과한 다음 프로세스를 반복합니다. PrimeService.Tests 디렉터리에서 다음 코드를 사용하여 PrimeService_IsPrimeShould.vb 파일을 만듭니다.
Imports TUnit.Assertions
Imports TUnit.Assertions.Extensions
Imports TUnit.Core
Namespace PrimeService.Tests
Public Class PrimeService_IsPrimeShould
Private ReadOnly _primeService As Prime.Services.PrimeService = New Prime.Services.PrimeService()
<Test>
Public Async Function IsPrime_InputIs1_ReturnFalse() As Task
Dim result As Boolean = _primeService.IsPrime(1)
Await Assert.That(result).IsFalse()
End Function
End Class
End Namespace
이 특성은 <Test> 테스트 실행기에서 실행하는 메서드를 표시합니다. TUnit은 클래스에 특성(attribute)이 필요하지 않습니다. TUnit 어설션은 비동기적이므로 테스트는 Async Function로, Task를 반환하고 Assert.That를 await합니다.
Visual Basic은 각 프로젝트의 루트 네임스페이스 아래에 코드를 배치하므로 PrimeService 클래스는 PrimeService.Prime.Services 네임스페이스에 있습니다. 테스트는 테스트 프로젝트의 네임스페이스 내에서는 이름 Prime.Services.PrimeService이 클래스가 아니라 네임스페이스를 참조하기 때문에 이를 PrimeService라고 참조합니다.
unit-testing-vb-tunit 디렉터리에서 dotnet test를 실행하여 테스트 및 클래스 라이브러리를 빌드한 다음 테스트를 실행합니다. TUnit 테스트 프로젝트에는 테스트를 실행할 프로그램 진입점이 포함되어 있습니다.
dotnet test는 생성한 단위 테스트 프로젝트를 사용하여 테스트 애플리케이션을 시작합니다.
테스트가 실패합니다. 아직 구현을 만들지 않았습니다. 작동하는 PrimeService 클래스에서 가장 간단한 코드를 작성하여 이 테스트를 통과합니다.
Public Function IsPrime(candidate As Integer) As Boolean
If candidate = 1 Then
Return False
End If
Throw New NotImplementedException("Please create a test first.")
End Function
unit-testing-vb-tunit 디렉터리에서 dotnet test을 다시 실행합니다.
dotnet test 명령은 PrimeService 프로젝트 및 PrimeService.Tests 프로젝트에 대한 빌드를 실행합니다. 두 프로젝트를 모두 빌드한 후 이 단일 테스트를 실행합니다. 통과합니다.
추가 기능 추가
이제 한 번의 테스트를 완료했으니 더 많은 테스트를 작성해야 합니다. 소수에 대한 몇 가지 다른 간단한 사례가 있습니다: 0, -1. 이러한 경우를 속성을 사용하여 새 테스트 <Test>로 추가할 수 있지만 금방 지루해질 수 있습니다. TUnit은 동일한 코드를 실행하지만 입력 인수가 다른 테스트 모음을 만드는 <Arguments> 특성을 제공합니다.
새 테스트를 만드는 대신 이 특성을 적용하여 단일 데이터 기반 테스트를 만듭니다.
IsPrime_InputIs1_ReturnFalse 함수를 다음 코드로 바꿉니다. 이 코드는 가장 낮은 소수인 2보다 작은 여러 값을 테스트합니다.
<Test>
<Arguments(-1)>
<Arguments(0)>
<Arguments(1)>
Public Async Function IsPrime_ValuesLessThan2_ReturnFalse(value As Integer) As Task
Dim result As Boolean = _primeService.IsPrime(value)
Await Assert.That(result).IsFalse()
End Function
dotnet test실행하면 이러한 테스트 중 두 가지가 실패합니다. 모든 테스트를 통과하려면 If 파일의 IsPrime 메서드 시작 부분에 있는 절을 변경합니다:
If candidate < 2 Then
주 라이브러리에 더 많은 테스트와 더 많은 코드를 추가하여 계속 반복합니다.
작은 라이브러리와 해당 라이브러리에 대한 단위 테스트 집합을 빌드했습니다. 새 패키지 및 테스트를 추가하는 것이 일반적인 워크플로의 일부가 되도록 솔루션을 구성했습니다. 애플리케이션의 목표를 해결하는 데 대부분의 시간과 노력을 집중했습니다.
또한, 다음을 참조하세요.
- TUnit 설명서
- dotnet reference add - .NET 참조 추가 명령어
- dotnet 테스트
.NET