반환 상태 변환 검증 테스트 (Return Status Transformation Verification Tests)

반환 상태 변환 검증 테스트 (Return Status Transformation Verification Tests)

1. 개요

반환 상태 변환 검증 테스트는 Inverter, ForceSuccess, ForceFailure 등의 상태 변환 데코레이터가 자식의 각 반환 상태에 대해 올바른 변환을 수행하는지를 체계적으로 검증하는 테스트이다. 각 데코레이터의 상태 변환 테이블을 기준으로, 모든 입력-출력 조합을 빠짐없이 테스트한다.

2. 테스트 전략

2.1 상태 변환 테이블 기반 완전 검증

각 데코레이터에 대해 SUCCESS, FAILURE, RUNNING의 3가지 입력에 대한 출력을 모두 검증한다.

2.2 Inverter 테스트

TEST(InverterTest, AllStatusTransformations)
{
    // SUCCESS → FAILURE
    mock_child.setReturn(SUCCESS);
    EXPECT_EQ(tree.tickOnce(), FAILURE);

    // FAILURE → SUCCESS
    mock_child.setReturn(FAILURE);
    EXPECT_EQ(tree.tickOnce(), SUCCESS);

    // RUNNING → RUNNING
    mock_child.setReturn(RUNNING);
    EXPECT_EQ(tree.tickOnce(), RUNNING);
}

2.3 ForceSuccess 테스트

TEST(ForceSuccessTest, AllStatusTransformations)
{
    // SUCCESS → SUCCESS
    mock_child.setReturn(SUCCESS);
    EXPECT_EQ(tree.tickOnce(), SUCCESS);

    // FAILURE → SUCCESS
    mock_child.setReturn(FAILURE);
    EXPECT_EQ(tree.tickOnce(), SUCCESS);

    // RUNNING → RUNNING
    mock_child.setReturn(RUNNING);
    EXPECT_EQ(tree.tickOnce(), RUNNING);
}

2.4 ForceFailure 테스트

TEST(ForceFailureTest, AllStatusTransformations)
{
    // SUCCESS → FAILURE
    mock_child.setReturn(SUCCESS);
    EXPECT_EQ(tree.tickOnce(), FAILURE);

    // FAILURE → FAILURE
    mock_child.setReturn(FAILURE);
    EXPECT_EQ(tree.tickOnce(), FAILURE);

    // RUNNING → RUNNING
    mock_child.setReturn(RUNNING);
    EXPECT_EQ(tree.tickOnce(), RUNNING);
}

3. 매개변수화된 테스트

struct TransformCase { NodeStatus input; NodeStatus expected; };

class InverterParamTest : public ::testing::TestWithParam<TransformCase> {};

TEST_P(InverterParamTest, Transform)
{
    mock_child.setReturn(GetParam().input);
    EXPECT_EQ(tree.tickOnce(), GetParam().expected);
}

INSTANTIATE_TEST_SUITE_P(Inverter, InverterParamTest,
    ::testing::Values(
        TransformCase{SUCCESS, FAILURE},
        TransformCase{FAILURE, SUCCESS},
        TransformCase{RUNNING, RUNNING}
    ));

4. 반복 tick에서의 일관성

동일한 입력에 대해 반복 tick에서도 동일한 출력이 반환되는지 검증한다.

TEST(InverterTest, ConsistentAcrossTicks)
{
    mock_child.setReturn(SUCCESS);
    for (int i = 0; i < 100; ++i)
    {
        EXPECT_EQ(tree.tickOnce(), FAILURE);
    }
}

5. 참고 문헌

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

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