본문 바로가기
Program Language/c++

C++ 기초(직원 관리 시스템 - 단위 테스트)

by 토담이아빠 2023. 2. 7.

단위 테스트

 

클래스 단위로 프로그램을 작성할 때 각각의 클래스마다 테스트 코드도 함께 작성하면 좋습니다.  이번 포스팅에서는 Employee 클래스에 대한 간단한 테스트 코드를 작성하는 방법과 좀 더 체계적으로 테스트하는 방법인 단위테스트에 대해서 정리했습니다.

 


※Employee 클래스에 대한 정의 및 구현은 아래 포스팅을 참고하세요


2023.01.31 - [프로그래밍/c++] - c++ 기초(직원 관리 시스템 - Employee 클래스 정의)

 

c++ 기초(직원 관리 시스템 - Employee 클래스 정의)

지금까지 정리한 내용을 바탕으로 만들어 보는 첫 프로그램입니다. 학습 시 참고하고 있는 책에 나오는 예제로 간단한 직원 관리 프로그램입니다. 직원 관리 시스템 회사 직원 정보를 관리하는

todamfather.tistory.com

2023.02.02 - [프로그래밍/c++] - C++ 기초(직원 관리 시스템 - Employee 클래스 구현)

 

C++ 기초(직원 관리 시스템 - Employee 클래스 구현)

이번 포스팅에서는 Employee 클래스의 정의에 이어 구현 부분을 정리했습니다.(정의 부분은 아래 링크를 참고하세요) [참고 : Employee 정의] 2023.01.31 - [프로그래밍/c++] - c++ 기초(직원 관리 시스템 - Em

todamfather.tistory.com


간단한 테스트 코드

 

다음은 main() 함수를 이용하여 Employee 클래스 연산을 간단히 테스트하는 예제입니다. 테스트가 충분히 끝난 곳은 주석처리로 중복 컴파일 되는 것을 피했습니다.


#include "stdafx.h"

#include <iostream>
#include "Employee.h"

using namespace std;
using namespace Records;

int main()
{
	cout << "테스트 Employee 클래스" << endl;
//	Employee emp("스토리", "티");
	Employee emp;
	emp.setFirstName("스토리");
	emp.setLastName("티");
	emp.setEmployeeNumber(71);
	emp.setSalary(500000);
//	emp.promote();
	emp.promote(1000000);
	emp.hire();
	emp.display();

	return 0;
}

결과


단위 테스트(Unit Test)

 

클래스 단위로 테스트하는 또 다른 방법에는 단위테스트가 있습니다. 비주얼 스튜디오에는 단위테스트를 할 수 있는 테스트 프레임워크를 기본으로 제공하고 있습니다. 단위 테스트 프레임워크를 활용하면 위 예제처럼 매번 결과를 확인하면서 테스트하는 번거로운 작업을 할 필요가 없습니다. 개발자는 오로지 테스트 작성에만 집중할 수 있기 때문에 더 유용합니다.

 

프로젝트 생성

 

다음은 비주얼스튜디오의 단위 테스트 프레임워크를 사용하는 방법을 보여줍니다.

 

    1. 솔루션 탐색기에서 솔루션 노드를 마우스 우클릭합니다. 

    2. 팝업메뉴에서 추가>새프로젝트를 선택합니다.

    3. 새 프로젝트 추가화면에서 언어는 c++로 선택하고 "test"로 검색하면 아래 화면처럼 나타납니다.

        (VisualStudio2019 기준)


새 프로젝트 추가 화면 - 기본 단위 테스트 프로젝트 선

    4. 기본 단위 테스트 프로젝트를 선택하고 다음을 클릭합니다.

    5. 새 프로젝트 구성 화면에서 원하는 이름으로 프로젝트 명을 정하고 만들기를 선택합니다.



    6. 프로젝트 생성 시 나타나는 초기 코드 화면은 다음과 같습니다.


테스트 코드 초기화면


프로젝트 설정

 

프로젝트가 생성이 되었으면 추가적으로 프로젝트를 설정해야 합니다.

 

    1. 생성된 단위테스트 프로젝트를 마우스 우클릭하여 나타나는 팝업메뉴에서 추가>참조를 선택합니다.

    2. 참조 추가 창에서 테스트하고자 하는 클래스가 들어 있는 프로젝트를 선택합니다.


참조 추가 화면


    3. 단위테스트 프로젝트를 마우스 우클릭하여 나타나는 팝업메뉴에서 맨 아래 "속성" 항목을 클릭합니다.

    4. 구성속성 > VC++ 디렉터리로 이동하여 포함 디렉터리참조 디렉터리에 다음 경로들을 추가합니다.


[포함 디렉터리]
$(VCIDEInstallDir)Auxiliary\VS\UnitTest\include

[참조 디렉터리]
$(VSInstallDir)Auxiliary\VS\UnitTest\lib

    5. 마지막으로 Employee 클래스가 있는 프로젝트의 구성형식을 확인해야 합니다. 구성속성 > 일반 > 구성형식에서 애플리케이션(.exe)으로 되어 있으면 동적라이브러리(.dll) 또는 정적 라이브러리(.lib)로 변경합니다.

 

단위 테스트 실행

 

TEST_CLASS(클래스명)TEST_METHOD(함수명) 안에 있는 클래스명과 함수명은 임의로 변경가능합니다. Employee 클래스를 테스트하는 것이 목적이므로 다음과 같이 원하는 테스트 코드를 작성합니다.


#include "pch.h"
#include "CppUnitTest.h"
#include "..\ExpertCpp\Employee.h"

using namespace Microsoft::VisualStudio::CppUnitTestFramework;

namespace UnitTest
{
	TEST_CLASS(EmployeeTest)
	{
	public:	
		TEST_METHOD(EmployeeInit)
		{
			std::string firstname = "스토리";
			std::string lastname = "티";
			Records::Employee* emp = new Records::Employee(firstname, lastname);
			Assert::AreEqual(firstname, emp->getFirstName());
			Assert::AreEqual(lastname, emp->getLastName());
		}

	};
}

 

TEST_METHOD(EmployeeInit){...} 내용은 생성자를 테스트하는 코드입니다.  Assert::AreEqual() 함수에 의해 괄호 안의 내용이 참이면 통과, 거짓이면 실패하게 될 것입니다.

 

    1. 상단 메뉴에서 테스트>테스트 탐색기를 클릭합니다. 

    2. 테스트 탐색기 창에서 실행버튼이나 모두 실행 버튼을 눌러 테스트를 시작합니다.


테스트 탐색기 실행화면


 Employee 클래스의 생성자를 테스트한 결과는 아래와 같이 나타납니다.


단위 테스트 결과


테스트를 추가하고 싶다면 다음과 같이 TEST_METHOD() 함수들을 추가하여 내용을 작성하면 됩니다.


TEST_CLASS(EmployeeTest)
{
public:	
    TEST_METHOD(EmployeeInit)
    {
        std::string firstname = "스토리";
        std::string lastname = "티";
        Records::Employee* emp = new Records::Employee(firstname, lastname);
        Assert::AreEqual(firstname, emp->getFirstName());
        Assert::AreEqual(lastname, emp->getLastName());
    }

    TEST_METHOD(EmployeeNumber)
    {
        Records::Employee emp;
        emp.setEmployeeNumber(71);
        Assert::AreEqual(71, emp.getEmployeeNumber());
    }
    
    ...
    
 }

[참고]
1. 전문가를 위한 c++(c++(개정 4판) (저자 : 마크 그레고리 / 옮긴이 남기혁)

댓글