본문 바로가기
카테고리 없음

📝 C# MSTest로 간단한 테스트 작성 및 실행하기 | TDD 실전 예제

by bbongz 2025. 3. 19.

 

이전 글에서 TDD의 개념MSTest 설정 방법을 알아보았습니다. 이제는 실제로 간단한 기능을 TDD로 구현해 보겠습니다. 😎

이번 글에서는 계산기 프로그램을 예제로 사용해 MSTest로 테스트 코드 작성 → 코드 작성 → 리팩토링까지 진행해 보겠습니다.


테스트 대상 코드 개요

간단한 계산기(Calculator) 클래스를 만들고 다음 기능을 구현합니다.

✔️ 덧셈 (Add)
✔️ 뺄셈 (Subtract)
✔️ 곱셈 (Multiply)
✔️ 나눗셈 (Divide)

테스트 코드를 먼저 작성한 후, 이를 통과하도록 코드를 작성하는 TDD 사이클을 따라가겠습니다.


🏗️ 프로젝트 구조 설정

1️⃣ 프로젝트 생성

이전 글에서 만든 TDDExample 솔루션에 다음과 같은 구조로 프로젝트를 구성합니다.

TDDExample
├── TDDExample (기능 코드)
├── TDDExample.Tests (테스트 코드)

2️⃣ Calculator 클래스 생성

TDDExample 프로젝트에 Calculator.cs 파일 생성

namespace TDDExample
{
    public class Calculator
    {
        // 여기에 코드 작성 예정
    }
}

테스트 코드 작성하기

이제 TDD 사이클의 Red 단계입니다.
테스트를 먼저 작성하고 이를 통과하도록 코드를 작성하겠습니다.


🧪 1. 덧셈 테스트 작성하기

TDDExample.Tests 프로젝트에서 CalculatorTests.cs 파일 작성

using Microsoft.VisualStudio.TestTools.UnitTesting;
using TDDExample;

namespace TDDExample.Tests
{
    [TestClass]
    public class CalculatorTests
    {
        [TestMethod]
        public void Add_ShouldReturnSumOfTwoNumbers()
        {
            // Arrange
            var calculator = new Calculator();
            int a = 3;
            int b = 5;
            int expected = 8;

            // Act
            int result = calculator.Add(a, b);

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

✔️ 테스트 설명

  • Arrange → 테스트에 필요한 값 설정
  • Act → 실제 코드 실행
  • Assert → 결과값이 예상값과 같은지 확인

🚨 2. 컴파일 오류 발생 → 코드 작성 필요

테스트를 실행하면 다음과 같은 오류가 발생합니다.

❌ 오류: Calculator 클래스에 Add 메서드가 정의되지 않았습니다.

👉 다음 단계에서 테스트가 통과하도록 Add 메서드를 구현하겠습니다.


테스트 통과 코드 작성하기

TDD 사이클의 Green 단계입니다.
테스트가 통과하도록 최소한의 코드를 작성합니다.

🧑‍💻 Calculator.cs 수정

namespace TDDExample
{
    public class Calculator
    {
        public int Add(int a, int b)
        {
            return a + b;
        }
    }
}

🚀 테스트 실행 및 통과 확인

  1. Visual Studio에서 테스트 → 모든 테스트 실행
  2. 결과 창에서 테스트 성공 확인

✅ 성공 메시지 출력 → "Add_ShouldReturnSumOfTwoNumbers 통과"

 


다른 연산도 동일한 방식으로 구현하기

같은 방식으로 뺄셈, 곱셈, 나눗셈 테스트 및 코드를 추가합니다.


🧪 3. 뺄셈 테스트 작성

[TestMethod]
public void Subtract_ShouldReturnDifferenceOfTwoNumbers()
{
    // Arrange
    var calculator = new Calculator();
    int a = 10;
    int b = 3;
    int expected = 7;

    // Act
    int result = calculator.Subtract(a, b);

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

🧑‍💻 Subtraction 코드 작성

public int Subtract(int a, int b)
{
    return a - b;
}

🧪 4. 곱셈 테스트 작성

[TestMethod]
public void Multiply_ShouldReturnProductOfTwoNumbers()
{
    // Arrange
    var calculator = new Calculator();
    int a = 4;
    int b = 5;
    int expected = 20;

    // Act
    int result = calculator.Multiply(a, b);

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

🧑‍💻 Multiply 코드 작성

public int Multiply(int a, int b)
{
    return a * b;
}

🧪 5. 나눗셈 테스트 작성

[TestMethod]
public void Divide_ShouldReturnQuotientOfTwoNumbers()
{
    // Arrange
    var calculator = new Calculator();
    int a = 10;
    int b = 2;
    int expected = 5;

    // Act
    int result = calculator.Divide(a, b);

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

🧑‍💻 Divide 코드 작성

public int Divide(int a, int b)
{
    if (b == 0)
        throw new DivideByZeroException("Cannot divide by zero.");
    
    return a / b;
}

리팩토링 단계

이제 코드를 깔끔하게 정리해 보겠습니다.

  • 중복 코드 제거
  • 변수 및 메서드 명명 규칙 통일

👉 최종 리팩토링된 코드는 다음과 같습니다.

public class Calculator
{
    public int Add(int a, int b) => a + b;
    public int Subtract(int a, int b) => a - b;
    public int Multiply(int a, int b) => a * b;
    public int Divide(int a, int b)
    {
        if (b == 0)
            throw new DivideByZeroException("Cannot divide by zero.");
        
        return a / b;
    }
}

🚀 최종 테스트 결과 확인

모든 테스트를 실행하고 결과를 확인합니다.

✅ 모든 테스트 통과 → 코드 완성! 🎉


🎯 마무리 및 다음 단계

이제 TDD 사이클을 성공적으로 적용했습니다.
다음 글에서는 예외 처리 및 다양한 입력 값에 대한 테스트 추가를 진행해 보겠습니다.