다음을 통해 공유


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 새 명령은 NUnit을 테스트 라이브러리로 사용하는 테스트 프로젝트를 만듭니다. 생성된 템플릿은 PrimeServiceTests.vbproj 파일에서 테스트 실행기를 구성합니다.

<ItemGroup>
  <PackageReference Include="nunit" Version="4.3.2" />
  <PackageReference Include="NUnit3TestAdapter" Version="5.0.0" />
  <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
</ItemGroup>

비고

.NET 9 이전에는 생성된 코드가 이전 버전의 NUnit 테스트 프레임워크를 참조할 수 있습니다. dotnet CLI 사용하여 패키지를 업데이트할 수 있습니다. 또는 PrimeService.Tests.vbproj 파일을 열고 패키지 참조 항목 그룹의 내용을 위의 코드로 바꿉니다.

테스트 프로젝트에는 단위 테스트를 만들고 실행하는 다른 패키지가 필요합니다. dotnet new 이전 단계에서 NUnit 및 NUnit 테스트 어댑터를 추가했습니다. 이제 PrimeService 클래스 라이브러리를 프로젝트에 다른 종속성으로 추가합니다. dotnet reference add 명령을 사용합니다.

dotnet reference add ../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> 테스트 실행기에서 실행하는 메서드를 표시합니다. unit-testing-vb-nunit에서 테스트 dotnet test 및 클래스 라이브러리를 빌드한 다음 테스트를 실행합니다. NUnit 테스트 실행기는 테스트를 실행할 프로그램 진입점을 포함합니다. 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-nunit 디렉터리에서 다시 실행 dotnet test 합니다. dotnet test 명령은 PrimeService 프로젝트 및 PrimeService.Tests 프로젝트에 대한 빌드를 실행합니다. 두 프로젝트를 모두 빌드한 후 이 단일 테스트를 실행합니다. 통과합니다.

추가 기능 추가

이제 한 번의 테스트를 완료했으니 더 많은 테스트를 작성해야 합니다. 소수에 대한 몇 가지 다른 간단한 사례가 있습니다: 0, -1. 이러한 경우를 속성을 사용하여 새 테스트 <Test>로 추가할 수 있지만 금방 지루해질 수 있습니다. 비슷한 테스트 모음을 작성할 수 있는 다른 xUnit 특성이 있습니다. 특성은 <TestCase> 동일한 코드를 실행하지만 입력 인수가 다른 테스트 모음을 나타냅니다. <TestCase> 특성을 사용하여 해당 입력에 대한 값을 지정할 수 있습니다.

새 테스트를 만드는 대신 다음 두 특성을 적용하여 가장 낮은 소수인 두 개 미만의 여러 값을 테스트하는 일련의 테스트를 만듭니다.

<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실행하면 이러한 테스트 중 두 가지가 실패합니다. 모든 테스트를 통과하려면 if 파일의 Main 메서드의 시작 절을 변경하세요.

if candidate < 2

주 라이브러리에 더 많은 테스트, 더 많은 이론 및 더 많은 코드를 추가하여 계속 반복합니다. 테스트 완료된 버전과 라이브러리 완전한 구현이 있습니다.

작은 라이브러리와 해당 라이브러리에 대한 단위 테스트 집합을 빌드했습니다. 새 패키지 및 테스트를 추가하는 것이 일반적인 워크플로의 일부가 되도록 솔루션을 구성했습니다. 애플리케이션의 목표를 해결하는 데 대부분의 시간과 노력을 집중했습니다.