[c#] 다형성을 활용한 유닛 테스트

다형성(Polymorphism)은 객체 지향 프로그래밍에서 중요한 개념으로, 서로 다른 클래스의 객체가 동일한 인터페이스를 통해 동일하게 동작할 수 있도록 하는 특성을 의미합니다. C#에서는 다형성을 통해 유닛 테스트(Unit Test) 작성 시에 효율적으로 코드를 구성할 수 있습니다.

public abstract class Shape
{
    public abstract double CalculateArea();
}

public class Circle : Shape
{
    public double Radius { get; set; }

    public override double CalculateArea()
    {
        return Math.PI * Radius * Radius;
    }
}

public class Rectangle : Shape
{
    public double Width { get; set; }
    public double Height { get; set; }

    public override double CalculateArea()
    {
        return Width * Height;
    }
}

위의 예시는 추상 클래스 Shape를 상속받아 CircleRectangle 클래스를 구현한 것입니다. 이제 이를 활용하여 유닛 테스트를 작성해보겠습니다. 아래는 MSTest 프레임워크를 사용한 유닛 테스트의 예시입니다.

[TestClass]
public class ShapeTests
{
    [TestMethod]
    public void CircleAreaCalculation()
    {
        // Arrange
        Shape circle = new Circle { Radius = 5 };

        // Act
        double area = circle.CalculateArea();

        // Assert
        Assert.AreEqual(78.5, area);
    }

    [TestMethod]
    public void RectangleAreaCalculation()
    {
        // Arrange
        Shape rectangle = new Rectangle { Width = 4, Height = 5 };

        // Act
        double area = rectangle.CalculateArea();

        // Assert
        Assert.AreEqual(20, area);
    }
}

위의 유닛 테스트에서 Shape 클래스를 상속받은 CircleRectangle 객체를 생성하여 각각의 면적을 계산하고, 예상 값과 실제 값이 일치하는지를 확인합니다.

다형성을 활용하면 동일한 인터페이스를 갖는 객체들을 효율적으로 다룰 수 있으며, 이를 통해 유지보수가 쉬운 테스트 코드를 작성할 수 있습니다.

참고 문헌: