[c++] 가상 함수를 이용한 유닛 테스트(unit testing)

가상 함수를 이용하여 유닛 테스트를 작성하려면, 테스트 대상 클래스에서 virtual 키워드를 사용하여 메서드를 선언해야 합니다. 그리고 이 테스트를 상속받는 테스트 클래스를 작성합니다.

가상 함수와 상속을 이용한 유닛 테스트의 예제를 살펴보겠습니다.

#include <iostream>
#include <cassert>

class Base {
public:
    virtual int add(int a, int b) {
        return a + b;
    }
};

class TestBase : public Base {
public:
    int add(int a, int b) override {
        // Override the add method for testing
        return 42;
    }
};

int main() {
    TestBase testObj;
    assert(testObj.add(1, 2) == 42);  // This will pass
    assert(testObj.Base::add(1, 2) == 3);  // This will also pass
}

이 예제에서 Base 클래스에는 add라는 가상 함수가 있고, TestBase 클래스는 Base 클래스에서 이를 상속받아 add 함수를 오버라이드(override)합니다. 이를 통해 우리는 TestBase 클래스에서 add 함수의 동작을 임의로 변경하여 유닛 테스트를 만들 수 있습니다.

이러한 방식으로 유닛 테스트를 작성하면, 어플리케이션의 일부분을 분리하여 개별적으로 테스트할 수 있어 코드의 격리성(isolation)을 보장할 수 있습니다. 따라서 코드 변경 시 테스트를 재실행하여 예기치 않는 부작용을 방지할 수 있습니다.

이러한 방법으로 가상 함수와 상속을 사용하여 C++에서 유닛 테스트를 작성할 수 있습니다.