횟수 제어 동작 검증 테스트 (Count Control Behavior Verification Tests)
1. 개요
횟수 제어 동작 검증 테스트는 Repeat, Retry 등 카운터 기반 데코레이터가 지정된 횟수만큼 정확하게 자��을 반복/재시도하고, 카운터가 올바르게 관리되는지를 검증하는 테스트이다.
2. Repeat 테스트
2.1 정확한 횟수 반복 검증
TEST(RepeatTest, RepeatsExactly3Times)
{
int child_tick_count = 0;
mock_child.onTick([&]() {
++child_tick_count;
return BT::NodeStatus::SUCCESS;
});
// num_cycles=3
BT::NodeStatus status;
do {
status = tree.tickOnce();
} while (status == BT::NodeStatus::RUNNING);
EXPECT_EQ(status, BT::NodeStatus::SUCCESS);
EXPECT_EQ(child_tick_count, 3);
}
2.2 FAILURE에 의한 조기 중단
TEST(RepeatTest, StopsOnFailure)
{
int count = 0;
mock_child.onTick([&]() {
++count;
return (count == 2) ? BT::NodeStatus::FAILURE
: BT::NodeStatus::SUCCESS;
});
BT::NodeStatus status;
do { status = tree.tickOnce(); }
while (status == BT::NodeStatus::RUNNING);
EXPECT_EQ(status, BT::NodeStatus::FAILURE);
EXPECT_EQ(count, 2); // 2번째에서 중단
}
3. Retry 테스트
3.1 재시도 후 성공
TEST(RetryTest, SucceedsAfterRetries)
{
int count = 0;
mock_child.onTick([&]() {
++count;
return (count == 3) ? BT::NodeStatus::SUCCESS
: BT::NodeStatus::FAILURE;
});
BT::NodeStatus status;
do { status = tree.tickOnce(); }
while (status == BT::NodeStatus::RUNNING);
EXPECT_EQ(status, BT::NodeStatus::SUCCESS);
EXPECT_EQ(count, 3);
}
3.2 모든 재시도 소진
TEST(RetryTest, FailsAfterAllAttempts)
{
mock_child.setReturn(BT::NodeStatus::FAILURE);
BT::NodeStatus status;
do { status = tree.tickOnce(); }
while (status == BT::NodeStatus::RUNNING);
EXPECT_EQ(status, BT::NodeStatus::FAILURE);
}
4. halt �� 카운터 리셋 검증
TEST(RepeatTest, ResetsCounterOnHalt)
{
// 2회 실행 후 halt
tree.tickOnce(); // RUNNING (count=1)
tree.tickOnce(); // RUNNING (count=2)
tree.haltTree();
// 재시작 �� ��음부터
int count = 0;
mock_child.onTick([&]() { ++count; return SUCCESS; });
BT::NodeStatus status;
do { status = tree.tickOnce(); }
while (status == BT::NodeStatus::RUNNING);
EXPECT_EQ(count, 3); // 전체 3회 반복 (리셋 확인)
}
5. 참고 문헌
- Google Test 문서. https://google.github.io/googletest/
- BehaviorTree.CPP 공식 문서. https://www.behaviortree.dev/
| 버전 | 날짜 | 변경 사항 |
|---|---|---|
| v0.1 | 2026-04-05 | 초안 작성 |