dotnet test 및 NUnit을 사용하여 Visual Basic .NET Core 라이브러리 유닛 테스트
이 자습서에서는 샘플 솔루션을 단계별로 빌드하는 대화형 환경을 통해 단위 테스트 개념을 알아볼 수 있습니다. 미리 빌드된 솔루션을 사용하여 이 자습서를 진행하려는 경우 시작하기 전에 샘플 코드를 보거나 다운로드. 다운로드 지침은 샘플 및 자습서를 참조하세요.
이 문서에서는 .NET Core 프로젝트를 테스트하는 방법에 대해 설명합니다. ASP.NET Core 프로젝트를 테스트하는 경우 ASP.NET Core의 통합 테스트를 참조하세요.
필수 조건
- .NET 8 SDK 이상 버전
- 선택하는 텍스트 편집기 또는 코드 편집기입니다.
소스 프로젝트 만들기
셸 창을 엽니다. 솔루션을 저장하기 위한 unit-testing-vb-nunit라는 디렉터리를 만듭니다. 이 새 디렉터리 내에서 다음 명령을 실행하여 클래스 라이브러리 및 테스트 프로젝트에 대한 새 솔루션 파일을 만듭니다.
dotnet new sln
다음으로 PrimeService 디렉터리를 만듭니다. 다음 개요는 지금까지의 파일 구조를 보여 줍니다.
/unit-testing-vb-nunit
unit-testing-vb-nunit.sln
/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-using-mstest 디렉터리로 변경합니다. 다음 명령을 실행하여 클래스 라이브러리 프로젝트를 솔루션에 추가합니다.
dotnet sln add .\PrimeService\PrimeService.vbproj
테스트 프로젝트 만들기
다음으로 PrimeService.Tests 디렉터리를 만듭니다. 다음 개요에는 디렉터리 구조가 나와 있습니다.
/unit-testing-vb-nunit
unit-testing-vb-nunit.sln
/PrimeService
Source Files
PrimeService.vbproj
/PrimeService.Tests
PrimeService.Tests 디렉터리를 현재 디렉터리로 만들고 다음 명령을 사용하여 새 프로젝트를 만듭니다.
dotnet new nunit -lang VB
dotnet new 명령은 NUnit를 테스트 라이브러리로 사용하는 테스트 프로젝트를 만듭니다. 생성된 템플릿은 PrimeServiceTests.vbproj 파일에 Test Runner를 구성합니다.
<ItemGroup>
<PackageReference Include="nunit" Version="4.2.2" />
<PackageReference Include="NUnit3TestAdapter" Version="4.6.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
</ItemGroup>
참고 항목
.NET 9 이전에는 생성된 코드가 이전 버전의 NUnit 테스트 프레임워크를 참조할 수 있습니다. dotnet CLI를 사용하여 패키지를 업데이트할 수 있습니다. 또는 PrimeService.Tests.vbproj 파일을 열고 패키지 참조 항목 그룹의 콘텐츠를 위의 코드로 바꿉니다.
테스트 프로제트는 다른 패키지에 단위 테스트를 만들고 실행하도록 요구합니다. 이전 단계의 dotnet new
는 NUnit 및 NUnit 테스트 어댑터를 추가했습니다. 이제 PrimeService
클래스 라이브러리를 프로젝트에 다른 종속성으로 추가합니다. dotnet add reference
명령을 사용합니다.
dotnet add reference ../PrimeService/PrimeService.vbproj
GitHub의 샘플 리포지토리에서 전체 파일을 볼 수 있습니다.
최종 솔루션 레이아웃은 다음과 같습니다.
/unit-testing-vb-nunit
unit-testing-vb-nunit.sln
/PrimeService
Source Files
PrimeService.vbproj
/PrimeService.Tests
Test Source Files
PrimeService.Tests.vbproj
unit-testing-vb-nunit 디렉터리에서 다음 명령을 실행합니다.
dotnet sln add .\PrimeService.Tests\PrimeService.Tests.vbproj
첫 번째 테스트 만들기
하나의 실패 테스트를 작성하고, 테스트가 성공하도록 만듭니다. 이 작업을 반복합니다. PrimeService.Tests 디렉터리에서 UnitTest1.vb 파일의 이름을 PrimeService_IsPrimeShould.VB로 변경하고 전체 내용을 다음 코드로 바꿉니다.
Imports NUnit.Framework
Namespace PrimeService.Tests
<TestFixture>
Public Class PrimeService_IsPrimeShould
Private _primeService As Prime.Services.PrimeService = New Prime.Services.PrimeService()
<Test>
Sub IsPrime_InputIs1_ReturnFalse()
Dim result As Boolean = _primeService.IsPrime(1)
Assert.That(result, [Is].False, $"1 should not be prime")
End Sub
End Class
End Namespace
<TestFixture>
특성은 테스트가 포함된 클래스를 나타냅니다. <Test>
특성은 Test Runner에서 실행하는 메서드를 나타냅니다. unit-testing-vb-nunit에서 dotnet test
를 실행하여 테스트 및 클래스 라이브러리를 빌드한 다음 테스트를 실행합니다. NUnit Test Runner에는 테스트를 실행할 프로그램 진입점이 포함되어 있습니다. dotnet test
는 만든 단위 테스트 프로젝트를 사용하여 Test Runner를 시작합니다.
테스트가 실패합니다. 구현은 아직 만들지 않았습니다. 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-nunit 디렉터리에서 dotnet test
를 다시 실행합니다. dotnet test
명령은 PrimeService
프로젝트에 대한 빌드를 실행한 다음 PrimeService.Tests
프로젝트에 대한 빌드를 실행합니다. 두 프로젝트를 모두 빌드한 후 이 단일 테스트를 실행합니다. 전달합니다.
더 많은 기능 추가
이제 하나의 테스트를 통과했으므로 더 작성할 수 있습니다. 소수에 대한 몇 가지 다른 간단한 사례가 있습니다(0, -1). 이러한 사례를 <Test>
특성과 함께 새 테스트로 추가할 수도 있지만, 이렇게 하면 금방 지루해질 수 있습니다. 비슷한 테스트 모음을 작성하는 데 사용할 수 있는 다른 xUnit 특성이 있습니다. <TestCase>
특성은 같은 코드를 실행하는 테스트 모음을 나타내지만, 서로 다른 입력 인수를 가지고 있습니다. <TestCase>
특성을 사용하여 그러한 입력의 값을 지정할 수 있습니다.
새 테스트를 만드는 대신 이 두 가지 특성을 적용하여 2보다 작은 일부 값(가장 낮은 소수)을 테스트하는 일련의 테스트를 만듭니다.
<TestFixture>
Public Class PrimeService_IsPrimeShould
Private _primeService As Prime.Services.PrimeService = New Prime.Services.PrimeService()
<TestCase(-1)>
<TestCase(0)>
<TestCase(1)>
Sub IsPrime_ValuesLessThan2_ReturnFalse(value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.That(result, [Is].False, $"{value} should not be prime")
End Sub
<TestCase(2)>
<TestCase(3)>
<TestCase(5)>
<TestCase(7)>
Public Sub IsPrime_PrimesLessThan10_ReturnTrue(value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.That(result, [Is].True, $"{value} should be prime")
End Sub
<TestCase(4)>
<TestCase(6)>
<TestCase(8)>
<TestCase(9)>
Public Sub IsPrime_NonPrimesLessThan10_ReturnFalse(value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.That(result, [Is].False, $"{value} should not be prime")
End Sub
End Class
dotnet test
를 실행합니다. 그러면 이러한 테스트 중 2개가 실패합니다. 모든 테스트를 통과하려면 PrimeServices.cs 파일에서 Main
메서드의 시작 부분에 있는 if
절을 변경합니다.
if candidate < 2
기본 라이브러리에서 더 많은 테스트, 더 많은 이론, 더 많은 코드를 추가하여 계속 반복합니다. 테스트의 완료된 버전 및 라이브러리의 완전한 구현을 얻게 됩니다.
작은 라이브러리 및 이 라이브러리에 대한 단위 테스트 집합을 작성했습니다. 새 패키지 및 테스트 추가가 정상 워크플로에 포함되도록 솔루션을 구조화했습니다. 애플리케이션의 목표를 해결하는 데 대부분의 시간과 노력을 들였습니다.
.NET