클래스 단위로 프로그램을 작성할 때 각각의 클래스마다 테스트 코드도 함께 작성하면 좋습니다. 이번 포스팅에서는 Employee 클래스에 대한 간단한 테스트 코드를 작성하는 방법과 좀 더 체계적으로 테스트하는 방법인 단위테스트에 대해서 정리했습니다.
※Employee 클래스에 대한 정의 및 구현은 아래 포스팅을 참고하세요
2023.01.31 - [프로그래밍/c++] - c++ 기초(직원 관리 시스템 - Employee 클래스 정의)
2023.02.02 - [프로그래밍/c++] - C++ 기초(직원 관리 시스템 - Employee 클래스 구현)
간단한 테스트 코드
다음은 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판) (저자 : 마크 그레고리 / 옮긴이 남기혁)
'Program Language > c++' 카테고리의 다른 글
C++ 기초(직원 관리 시스템 - 사용자 인터페이스) (10) | 2023.02.13 |
---|---|
C++ 기초(직원 관리 시스템 - Database 클래스) (19) | 2023.02.09 |
C++ 기초(직원 관리 시스템 - Employee 클래스 구현) (18) | 2023.02.02 |
c++ 기초(직원 관리 시스템 - Employee 클래스 정의) (12) | 2023.01.31 |
C++ 기초(유니폼 초기화) (16) | 2023.01.27 |
댓글