Trouble executing with stubs

DevelcoDevelco Posts: 1

I've made a couple of stubs using the "Lesson 15: Configuring Stub Behavior in Source Code" chapter in "C++test Host-Based Unit Testing" guide.

After running "Collect Stub Information" I created User Stubs for the functions I needed to stub. Trying to execute my test case give the error:
function "CPPTEST_STUB_CALLBACK_PARAMS" declared implicitly
C/C++ Test created the stub function:

EXTERN_C_LINKAGE E_TIMER_STATUS TimerSvc_Start (E_TIMER_ID timId, uint32_t time) ;
EXTERN_C_LINKAGE E_TIMER_STATUS CppTest_Stub_TimerSvc_Start (E_TIMER_ID timId, uint32_t time) 
{
    CPPTEST_STUB_CALLED("TimerSvc_Start");

    E_TIMER_STATUS __return = TIMER_ERROR;

    /**
     * This section enables Dynamic Stub Configuration with Stub Callbacks.
     *
     * IMPORTANT: THIS COMMENT BLOCK SHOULD NOT BE DELETED OR MODIFIED
     *
     * 1. Define stub callback function in test suite file - use the following signature:
     *     void CppTest_StubCallback_SomeName(CppTest_StubCallInfo* stubCallInfo, E_TIMER_STATUS* __return, E_TIMER_ID timId, uint32_t time)
     *
     * 2. Register stub callback in test case function - use the following code:
     *     CPPTEST_REGISTER_STUB_CALLBACK("TimerSvc_Start", &CppTest_StubCallback_SomeName);
     *
     * 3. Fill out the body of the stub callback function according to intent.
     * The following line may be used to call original function inside stub callback:
     *     *__return = TimerSvc_Start(timId, time);
     */
    if (CPPTEST_STUB_HAS_CALLBACK()) {
        CPPTEST_STUB_CALLBACK_PARAMS(E_TIMER_STATUS* __return, E_TIMER_ID timId, uint32_t time);
        CPPTEST_STUB_INVOKE_CALLBACK(&__return, timId, time);

    } else {
        /* You can put additional stub logic here. */

    }

    return __return;
}

Using the guide I changed the function to:

EXTERN_C_LINKAGE E_TIMER_STATUS CppTest_Stub_TimerSvc_Start (E_TIMER_ID timId, uint32_t time) 
{
    E_TIMER_STATUS __return = TIMER_ERROR;

    CPPTEST_CALL_STUB_CALLBACK("TimerSvc_Start", &__return, timId, time);

    return __return;
}

And registered the stub in my test case.

void CppTest_StubCallback_TimerSvc_Start(CppTest_StubCallInfo* stubCallInfo, E_TIMER_STATUS* __return, E_TIMER_ID timId, uint32_t time)
{
  printf("CppTest_StubCallback_TimerSvc_Start\r\n");
  //*__return = TimerSvc_Start(timId, time);
}

/* CPPTEST_TEST_CASE_BEGIN test_SensorMgr_On_01 */
/* CPPTEST_TEST_CASE_CONTEXT E_SENSOR_MGR_STATE SensorMgr_On(void) */
void SensorMgr_unit_test_test_SensorMgr_On_01()
{
    /* Pre-condition initialization */
    CPPTEST_REGISTER_STUB_CALLBACK("TimerSvc_Start", &CppTest_StubCallback_TimerSvc_Start);
    /* Initializing global variable sensorMgrState */ 
    {
         sensorMgrState  = SENSOR_OFF;
    }
    {
        /* Tested function call */
        E_SENSOR_MGR_STATE _return  = SensorMgr_On();
        /* Post-condition check */
        CPPTEST_POST_CONDITION_ENUM(E_SENSOR_MGR_STATE, "E_SENSOR_MGR_STATE _return", ( _return ));
        CPPTEST_POST_CONDITION_ENUM(E_SENSOR_MGR_STATE, "E_SENSOR_MGR_STATE sensorMgrState", ( sensorMgrState ));
    }
}

But when I execute (not in FileScope) I get the "Quality Task":
Message: Invalid stub configuration - cannot use Stub Callbacks for "TimerSvc_Start" (hint: re-create stub with "Dynamic stubs configuration> Enable Stub Callbacks" option enabled)

If I execute in FileScope mode I get a linker error:

IAR ELF Linker V8.22.2.15995/W32 for ARM
Copyright 2007-2018 IAR Systems AB.
Error[Li005]: no definition for "TimerSvc_Start" [referenced from C:\Users\swtest\parasoft\workspace\.cpptest\ADC_AnalogWatchdog_test\file-data\SensorMgr.c922fb77f\tested\harness_SensorMgr.o]

My Test Configurations are based on "Run IAR ARM Tests" and work fine without stubs.

Any help?

BR, Thomas Damgaard

Sign In or Register to comment.