.NET Core 응용 프로그램에 대한 단위 테스트를 작성하는 방법
단위 테스트를 작성하는 것은 좋은 소프트웨어 엔지니어링 관행입니다. 이 기사에서는 TDD(Test Driven Development) 접근 방식을 준수하면서 C# .NET Core 애플리케이션을 만드는 방법을 배웁니다.
TDD 방식에서는 기능을 구현하기 전에 해당 기능에 대한 단위 테스트를 작성합니다. 예를 들어 두 숫자를 더하는 함수를 작성하려는 경우 먼저 실패한 단위 테스트를 작성한 다음 테스트를 통과하는 기능을 구현합니다.
이 게시물에서는 계산기 응용 프로그램을 만듭니다. 시작하려면 아래에 설명된 대로 폴더 구조를 따르겠습니다.
- CalculatorApp – Solution
- CalculatorApp.Services – Application project
- CalculatorApp.Services.Tests – 테스트 프로젝트
Visual Studio를 사용하여 프로젝트를 만들 수 있습니다. 그러나 이 게시물에서는 .NET Core 명령을 사용하여 프로젝트를 만들고, 테스트를 추가하고, 테스트를 실행합니다. MSTest 또는 NUnit을 사용하여 단위 테스트를 작성할 수도 있지만 이 예제에서는 xUnit 및 dotnet test를 사용하여 단위 테스트를 작성하고 실행합니다.
먼저 명령 셸을 열고 따라해 보겠습니다.
응용 프로그램 프로젝트 만들기
시작하려면 CalculatorApp 이라는 디렉토리를 만들어야 합니다. 디렉토리에 대해 원하는 명명 규칙을 따를 수 있지만 이 게시물을 따르고 싶다면 동일한 디렉토리 이름을 따르는 것이 좋습니다. 이제 CalculatorApp 디렉토리를 만들고 이동해 보겠습니다.
CalculatorApp 디렉토리 내에서 다음 명령을 실행하여 새 솔루션을 만들 것입니다.
dotnet new sln
명령을 성공적으로 실행한 후 "템플릿 솔루션 파일이 성공적으로 생성되었습니다"라는 메시지가 표시됩니다. 또한 CalculatorApp 디렉토리 내에서 calculatorapp.sln라는 파일을 찾을 수 있습니다.
그런 다음 CalculatorApp.Services 라는 디렉토리를 만듭니다.이 디렉토리는 응용 프로그램 소스, 즉 계산기 응용 프로그램의 모든 클래스를 유지합니다. Calculatorapp.Services 디렉터리로 이동하고 다음 명령을 실행하여 클래스 라이브러리를 만듭니다.
dotnet new classlib
이 명령을 성공적으로 실행하면 "템플릿 클래스 라이브러리가 성공적으로 생성되었습니다"라는 메시지가 표시됩니다. CalculatorApp.Services 디렉터리 내에서 calculatorapp.services.csproj라는 파일도 찾을 수 있습니다. 다음으로, 이 클래스 라이브러리 프로젝트를 calculatorapp 솔루션에 추가해야 합니다. 이렇게 하려면 calculatorapp 디렉터리로 다시 이동하여 다음 명령을 실행합니다.
dotnet sln add .\calculatorapp.services\calculatorapp.services.csproj
명령을 성공적으로 실행하면 "프로젝트가 솔루션에 추가되었습니다"라는 메시지가 표시됩니다.
CalculatorApp.Services 폴더 내에서 Class1 클래스를 찾을 수 있으며 이름을 Calculator로 바꾸고 아래 목록과 같이 클래스를 수정합니다.
Calculator.cs
using System; namespace calculatorapp.services { public class Calculator { public int Add(int num1, int num2) { throw new NotImplementedException(); } public int Sub(int num1, int num2) { throw new NotImplementedException(); } } }
위의 목록에서 Add 및 Sub 함수가 구현되지 않았음을 알 수 있습니다. 먼저 단위 테스트를 작성한 다음 이러한 기능을 구현합니다.
테스트 프로젝트 만들기
테스트 프로젝트를 추가하려면 CalculatorApp.Services.Tests라는 디렉터리를 만들고 해당 디렉터리로 이동합니다. 이 디렉터리에서 다음 명령을 실행하여 MS 테스트 프로젝트를 만듭니다.
dotnet new mstest
이 명령은 MS Test를 테스트 라이브러리로 사용하는 테스트 프로젝트를 만듭니다. 테스트 프로젝트가 만들어지면 테스트 프로젝트에 소스 프로젝트 라이브러리를 추가합니다. 이렇게 하려면 다음 명령을 실행합니다.
dotnet add 참조 .. /CalculatorApp.Services/CalculatorApp.Services.csproj
이 명령은 CalculatorAppService 프로젝트의 참조를 테스트 프로젝트에 추가합니다. 참조를 추가한 후 calculatorapp 루트 디렉터리로 이동하여 솔루션에 테스트 프로젝트를 추가하고 다음 명령을 실행합니다.
dotnet sln add .\CalculatorAppServices.tests\CalculatorAppServices.Tests.csproj
이 명령은 솔루션에 테스트 프로젝트를 추가합니다. 명령을 성공적으로 실행하면 "프로젝트가 솔루션에 추가되었습니다"라는 메시지가 표시됩니다.
Writing Unit Tests
지금까지 애플리케이션 소스 프로젝트와 테스트 프로젝트를 만들었습니다. 응용 프로그램 소스 프로젝트에는 구현되지 않은 함수가 있습니다. 이제 이러한 함수에 대한 테스트를 작성해 보겠습니다.
테스트 프로젝트에서 UnitTest1.cs 파일의 이름을 Calculator.Test.cs로 바꾸고 클래스 이름을 CalculatorTest로 바꿨습니다. CalculatorTest의 생성자에서 Calculator 클래스의 객체를 생성해야 합니다. 이 작업은 아래 목록에 표시된 대로 수행할 수 있습니다.
Calculator.Test.cs
using Microsoft.VisualStudio.TestTools.UnitTesting; using calculatorapp.services; namespace CalculatorApp.Services.Tests { [TestClass] public class CalculatorTest { Calculator _calc; public CalculatorTest() { _calc = new Calculator(); } } }
Add Function에 대한 단위 테스트
CalculatorTest 클래스에서 아래 목록과 같이 추가 기능을 테스트하는 단위 테스트 메서드를 추가합니다.
[TestMethod] public void shouldaddtwonumbers() { int res = _calc.Add(5, 3); Assert.AreEqual(res, 8); }
테스트를 실행하려면 CalculatorApp.Services.Tests 디렉터리로 이동하여 다음 명령을 실행합니다.
dotnet test
아래 이미지와 같이 Add 함수가 구현되지 않았기 때문에 '테스트 실패' 출력이 표시됩니다.

테스트를 통과하려면 아래 목록과 같이 Calculator 클래스에서 Add 함수를 구현합니다.
public int Add(int num1, int num2) { int result = num1 + num2; return result; }
지금 테스트를 실행하려면 CalculatorApp.Services.Tests director로 이동하여 다음 명령을 실행합니다.
dotnet test
출력으로 아래 이미지와 같이 'test passed' 메시지가 표시됩니다.

이제 .NET Core 애플리케이션에서 TDD 접근 방식을 준수하면서 추가 기능을 구현했습니다!
Sub 함수에 대한 단위 테스트
CalculatorTest 클래스에서 아래 목록과 같이 sub 기능을 테스트하는 단위 테스트 메서드를 추가합니다.
[TestMethod] public void shouldsubstracttwonumbers() { int res = _calc.Sub(5, 3); Assert.AreEqual(res, 2); }
테스트를 실행하려면 CalculatorApp.Services.Tests 디렉터리로 이동하여 다음 명령을 실행합니다.
dotnet test
여기서는 Sub 함수가 구현되지 않았기 때문에 테스트가 실패합니다. 아래 이미지와 같이 실패한 테스트 결과가 하나 표시됩니다.

테스트를 통과하려면 아래 목록과 같이 Calculator 클래스에서 Sub 함수를 구현합니다.
public int Sub(int num1, int num2) { int result = num1 - num2; return result; }
이제 CalculatorApp.Services.Tests 디렉터리로 이동하여 다음을 실행하여 테스트를 다시 실행합니다.
dotnet test
이제 다음과 같이 두 테스트를 모두 통과한 것을 확인할 수 있습니다.

이제 .NET Core 애플리케이션에서 TDD 접근 방식을 준수하면서 Sub 기능을 구현했습니다.
마무리
지금까지 이 게시물에서는 TDD 접근 방식을 준수하면서 .NET Core 계산기 애플리케이션을 만들었습니다. 테스트를 만들기 위해 XUnit 및 dotnet 테스트를 사용했습니다. 참고로 다음은 Calculator 클래스와 해당 테스트 클래스의 소스 코드입니다.
Calculator.cs
using System; namespace calculatorapp.services { public class Calculator { public int Add(int num1, int num2) { int result = num1 + num2; return result; } public int Sub(int num1, int num2) { int result = num1 - num2; return result; } } }
Calculator.test.cs
using Microsoft.VisualStudio.TestTools.UnitTesting; using calculatorapp.services; namespace CalculatorApp.Services.Tests { [TestClass] public class CalculatorTest { Calculator _calc; public CalculatorTest() { _calc = new Calculator(); } [TestMethod] public void shouldaddtwonumbers() { int res = _calc.Add(5, 3); Assert.AreEqual(res, 8); } [TestMethod] public void shouldsubstracttwonumbers() { int res = _calc.Sub(5, 3); Assert.AreEqual(res, 2); } } }
이것이 단위 테스트를 작성한 다음 기능을 구현하는 방법입니다. 이 게시물이 다음 .NET Core 응용 프로그램에 대한 단위 테스트 작성을 시작하는 데 도움이되기를 바랍니다!
