Program/C#

C# 유닛(단위)테스트(2)

사막여유 2024. 12. 9. 23:59
728x90

 

기존 프로젝트에서 유닛 테스트 추가하기

앞서 유닛(단위)테스트(1)에서는 유닛 테스트 작성 방법에 대해 알아보았습니다.

https://opencv-master.tistory.com/190

 

C# 유닛(단위)테스트(1)

오늘은 C#에서의 유닛(단위) 테스트에 대해 알아보려 합니다. C#에서 유닛(단위) 테스트란?유닛 테스트(Unit Test)는 프로그램의 작은 조각(주로 클래스나 메서드)이 올바르게 작동하는지 검증하는

opencv-master.tistory.com

 

이번에는 이미 존재하는 프로젝트에 유닛 테스트를 추가하는 방법을 단계별로 살펴보겠습니다.
기존 프로젝트에서 유닛 테스트를 작성하려면 테스트 프로젝트를 새로 생성하여 기존 프로젝트를 참조하는 방식으로 진행하는 것이 가장 좋은 방법입니다.


왜 테스트 프로젝트를 분리해야 할까?

  1. 독립성 보장
    • 유닛 테스트는 프로덕션 코드와 별도로 독립적으로 실행되어야 합니다.
  2. 코드 관리 용이성
    • 테스트 코드를 별도로 분리하면 프로젝트 구조가 깔끔해지고, 유지보수가 쉬워집니다.
  3. 코드 품질 검증
    • 테스트 프로젝트를 통해 변경된 코드의 영향을 쉽게 검증할 수 있습니다.

기존 프로젝트에 유닛 테스트 추가하는 방법

1. 테스트 프로젝트 생성하기

  1. Visual Studio에서 솔루션 탐색기를 열고, 프로젝트의 솔루션 이름을 우클릭.
  2. 추가 > 새 프로젝트를 선택.
  3. **"단위 테스트 프로젝트(MSTest)"**를 검색하고 선택.
    • 프로젝트 이름은 보통 ProjectName.Tests로 설정합니다.
  4. 테스트 프로젝트가 기존 솔루션에 추가됩니다.


 

2. 기존 프로젝트 참조 추가하기

  1. 새로 생성한 테스트 프로젝트를 우클릭하고, 참조 추가를 선택.
  2. 프로젝트 > 솔루션 탭에서 기존 프로젝트를 선택 후 확인 클릭.
    • 이렇게 하면 테스트 프로젝트에서 기존 프로젝트의 클래스와 메서드에 접근할 수 있습니다.

 


 

3. 테스트 클래스 작성하기

테스트 프로젝트에 테스트 클래스를 생성하고, 기존 프로젝트의 코드를 테스트합니다.
테스트 코드는 [TestClass]와 [TestMethod] 어트리뷰트를 사용해 작성합니다.

using Microsoft.VisualStudio.TestTools.UnitTesting;
using MyExistingProject; // 기존 프로젝트 네임스페이스

[TestClass]
public class ExistingClassTests
{
    [TestMethod]
    public void SomeMethod_ValidInput_ReturnsExpectedResult()
    {
        // Arrange
        var obj = new ExistingClass(); // 기존 클래스 인스턴스 생성
        string input = "Hello";

        // Act
        string result = obj.SomeMethod(input);

        // Assert
        Assert.AreEqual("HELLO", result); // 기대값과 결과값 비교
    }
}
 

 

4. 테스트 실행하기

  1. Visual Studio 메뉴에서 테스트 > 모든 테스트 실행을 클릭.
  2. 테스트 탐색기(Test Explorer) 창에서 테스트 결과를 확인합니다.
    • 녹색: 성공
    • 빨간색: 실패

 


프로젝트 구조 예시

테스트 프로젝트를 추가하면 프로젝트 구조는 다음과 같이 정리됩니다:

Solution
├── MyExistingProject
│   ├── Class1.cs
│   ├── Class2.cs
├── MyExistingProject.Tests
    ├── Class1Tests.cs
    ├── Class2Tests.cs

이 구조는 기능 코드와 테스트 코드를 분리하여 관리하기에 이상적입니다.

 


 

추가로 알아둘 점

  1. 테스트 프로젝트와 기존 프로젝트의 네임스페이스 충돌 방지
    • 테스트 코드에서 기존 프로젝트의 클래스와 메서드를 사용할 때 네임스페이스를 명시해야 합니다.
    • 예: using MyExistingProject;
  2. 모의 객체(Mock) 사용
    • 테스트 대상 메서드가 외부 의존성을 포함할 경우, Mocking 프레임워크를 사용하여 테스트를 간소화할 수 있습니다.
    • 예: Moq, NSubstitute 등.

 


 

기존 프로젝트에서 테스트 코드 작성 예시: MSTest 기반

기능 코드: 기존 프로젝트

namespace MyExistingProject
{
    public class Calculator
    {
        public int Add(int a, int b) => a + b;

        public int Divide(int a, int b)
        {
            if (b == 0) throw new DivideByZeroException();
            return a / b;
        }
    }
}

테스트 코드: 테스트 프로젝트

using Microsoft.VisualStudio.TestTools.UnitTesting;
using MyExistingProject;

[TestClass]
public class CalculatorTests
{
    [TestMethod]
    public void Add_ValidInputs_ReturnsCorrectSum()
    {
        // Arrange
        var calculator = new Calculator();

        // Act
        int result = calculator.Add(3, 5);

        // Assert
        Assert.AreEqual(8, result);
    }

    [TestMethod]
    [ExpectedException(typeof(DivideByZeroException))]
    public void Divide_ByZero_ThrowsDivideByZeroException()
    {
        // Arrange
        var calculator = new Calculator();

        // Act
        calculator.Divide(10, 0);

        // Assert
        // ExpectedException으로 예외 발생 확인
    }
}

결론

기존 프로젝트에서 유닛 테스트를 추가하려면 별도의 테스트 프로젝트를 생성한 뒤, 기존 프로젝트를 참조하여 테스트를 작성합니다.
이 과정은 초기에는 번거로워 보일 수 있지만, 코드 품질 유지 및 버그 예방에 매우 유용하며, 팀 협업에도 큰 도움이 됩니다.

 

 

728x90

'Program > C#' 카테고리의 다른 글

C# 프로젝트 Error 정리  (0) 2025.01.08
C# netDxf 라이브러리 (1)  (0) 2024.12.16
C# 유닛(단위)테스트(1)  (0) 2024.12.09
C# 디스크I/O  (1) 2024.12.07
C# _ Interface  (0) 2024.11.24