Description

  • Unit Test 작성

Source

/**
 * (y, x) 좌표를 표현하는 자료구조
 *
typedef struct pos {
	int y;
	int x;
} POS;

/**
 * 화재 감지 센서 인터페이스
 *
class FireSensor
{
public:
	/**
	 * 현재 화재를 감지한 센서의 위치 값을 반환
	 * @return POS 타입의 (y, x) 좌표. 예를 들어, 1 센서에서 화재를 감지한 경우 {1, 10} 반환
	 *
	virtual POS getSensorPosition() = 0;
};

/**
 * 드론 관제 시스템 (테스트 대상)
 *
class DroneController
{
	POS currentDrone1_ = { 0,0 };
	POS currentDrone2_ = { 10,10 };

	FireSensor* sensor_;
	...
public:
	DroneController(FireSensor* sensor) : sensor_(sensor) { ... }

	/**
	 * 화재가 발생한 위치를 얻어와서 현재 드론과의 위치를 계산하여 가장 가까운 드론을 선택하는 함수 (테스트 대상)
	 * 다음 위치 계산을 위해 선택된 드론의 위치를 저장해둔다. (선택된 드론이 해당 좌표로 이동함을 가정)
	 * @return 화재가 발생한 곳과 가장 가까운 드론의 번호. 1 혹은 2
	 *
	int selectDrone()
	{
		POS sensed = sensor_->getSensorPosition();  // 화제를 감지한 센서의 위치 획득


		int dx = currentDrone1_.x - sensed.x;
		int dy = currentDrone1_.y - sensed.y;
		int dist1 = dx*dx + dy*dy;

		dx = currentDrone2_.x - sensed.x;
		dy = currentDrone2_.y - sensed.y;
		int dist2 = dx*dx + dy*dy;

		if (dist2 >= dist1)
		{
			currentDrone1_ = sensed;
			return 1;
		}
		else
		{
			currentDrone2_ = sensed;
			return 2;
		}
	}
	...
}

make Stub Class

// 문제 3. 테스트 코드 작성

class StubSensor: public FireSensor
{
public:
	POS m_testPos;
	POS getSensorPosition(){
		return m_testPos;
	}
};

void test_3_1()
{
	// TODO: 항목 3-1.

	// 화재 위치가 센서 1, 7, 2, 3, 5 순으로 감지되는 상황을 재현하는 테스트 코드

	StubSensor sensor;
	DroneController dc((FireSensor*)&sensor);
	sensor.m_testPos.y = 1; sensor.m_testPos.x = 10;
	dc.selectDrone();
	sensor.m_testPos.y = 8; sensor.m_testPos.x = 2;
	dc.selectDrone();
	sensor.m_testPos.y = 2; sensor.m_testPos.x = 6;
	dc.selectDrone();
	sensor.m_testPos.y = 4; sensor.m_testPos.x = 1;
	dc.selectDrone();
	sensor.m_testPos.y = 6; sensor.m_testPos.x = 10;
	dc.selectDrone();
}

GitHub (n/a)

DroneGo