타이밍 동작 검증 테스트 (Timing Behavior Verification Tests)

타이밍 동작 검증 테스트 (Timing Behavior Verification Tests)

1. 개요

타이밍 동작 검증 테스트는 Timeout, Delay 등 시간 기반 데코레이터의 정확한 시간 제어 동작을 검증하는 테스트이다. 시간 초과, 지연 완료, 타이머 리셋 등의 시간적 동작이 지정된 매개변수에 맞게 올바르게 수행되는지를 확인한다.

2. Timeout 테스트

2.1 시간 내 완료 시 자식 상태 통과

TEST(TimeoutTest, PassesThroughOnTimelyCompletion)
{
    mock_child.setReturn(BT::NodeStatus::SUCCESS);
    EXPECT_EQ(tree.tickOnce(), BT::NodeStatus::SUCCESS);
}

2.2 시간 초과 시 FAILURE 반환

TEST(TimeoutTest, ReturnsFailureOnTimeout)
{
    mock_child.setReturn(BT::NodeStatus::RUNNING);
    tree.tickOnce();  // RUNNING

    // Timeout 경과
    std::this_thread::sleep_for(
        std::chrono::milliseconds(timeout_ms + 100));

    EXPECT_EQ(tree.tickOnce(), BT::NodeStatus::FAILURE);
}

2.3 시간 초과 시 자식 halt 호출

TEST(TimeoutTest, HaltsChildOnTimeout)
{
    mock_child.setReturn(BT::NodeStatus::RUNNING);
    tree.tickOnce();

    std::this_thread::sleep_for(
        std::chrono::milliseconds(timeout_ms + 100));
    tree.tickOnce();

    EXPECT_EQ(mock_child.status(), BT::NodeStatus::IDLE);
}

3. Delay 테스트

3.1 지연 중 RUNNING 반환

TEST(DelayTest, ReturnsRunningDuringDelay)
{
    EXPECT_EQ(tree.tickOnce(), BT::NodeStatus::RUNNING);
}

3.2 지연 완료 후 자식 tick

TEST(DelayTest, TicksChildAfterDelay)
{
    mock_child.setReturn(BT::NodeStatus::SUCCESS);

    // 지연 경과 전
    tree.tickOnce();  // RUNNING

    // 지연 경과 후
    std::this_thread::sleep_for(
        std::chrono::milliseconds(delay_ms + 100));

    EXPECT_EQ(tree.tickOnce(), BT::NodeStatus::SUCCESS);
}

4. 시간 정밀도 고려

시간 기반 테스트는 시스템 스케줄링에 의한 비결정적 지연이 존재��므로, 정확한 시간 일치를 기대하지 않고 ���용 범��를 설정한다.

// 100ms ± 50ms 허용
EXPECT_TRUE(elapsed_ms >= 50 && elapsed_ms <= 150);

5. 설계 시 고려 사항

5.1 시뮬레이션 시간 대응

std::chrono::steady_clock 기반 데코레이터는 시뮬레이션 시간과 독립적이므로, 시뮬레이션 환경에서 테스트 시 실제 시간이 적용된다.

5.2 CI 환경에서의 타이밍 테스트

CI(Continuous Integration) 환경에서는 시스템 부하에 의해 타이밍이 부정확할 수 있다. 넉넉한 허용 범위를 설정하��나, 타이밍에 의존하지 않는 대안적 검증 방법을 사용한다.

6. 참고 문헌

  • Google Test 문서. https://google.github.io/googletest/
  • BehaviorTree.CPP 공식 문서. https://www.behaviortree.dev/

버전날짜변경 사항
v0.12026-04-05초안 작성