2016-06-07 1 views
2

단위 테스트에 Cmocka을 사용하고 있으며 변경할 수 없습니다.Cmocka는 내 (void) 콜백 함수가 올바른 매개 변수로 호출되었는지 테스트 할 수 있습니까?

콜백 함수를 호출하는 소프트웨어의 일부를 테스트하고 있는데, 값이 변경되면 변경된 데이터 항목과 새 값을 나타냅니다. 단위 테스트에 대한

typedef void (* Value_changed_call_back) (int item_Id, int new_value); 

, 나는 몇 가지 콜백 함수를 등록하고 실제로 호출하고 있는지 확인하려면, 그들이 올바른 매개 변수를받을 수 :

콜백 기능이 서명을해야합니다.

올바른 매개 변수로 호출되었는지 확인하기 위해 expect_int()을 사용할 수 있습니다.

하지만 콜백 함수의 형식이 void이고 변경할 수 없기 때문에 will_return()을 어떻게 사용할 수 있는지 알지 못합니다.

모의 콜백 함수를 선언하고 올바른 매개 변수로 호출되는지 확인하려면 어떻게해야합니까? 함수가 호출되지 않으면 테스트가 실패해야합니다.

답변

1

나는 콜백을위한 스텁을 만들고 등록하는 것이 가장 좋은 방법이라고 생각한다. 그런 다음 콜백 내부에서 전역 변수를 값으로 설정합니다. 그런 다음 스텁 함수에 설정된 값을 어설 션 할 수 있습니다. 어설 션과 콜백이 동일한 스레드에서 실행되어 어설 션이 경쟁 조건이 아닌지 확인하기 만하면됩니다.

+0

당신은 유일하게 대답하는 Sicne입니다, 나는 당신에게 quesition과 보너스 포인트를 수여 할 것입니다. 그렇지 않으면 시스템에서 자동 포상을 지급하지만 포인트의 절반 만 받게됩니다. 스택 오버플로에 오신 것을 환영합니다. 도와 주심에 감사드립니다. – Mawg

+1

@Mawg 감사합니다. 저는 cmocha 문서를 살펴볼 시간을 가졌습니다. 이것이 내가 생각할 수있는 유일한 해결책이었습니다. 과거에 해본 테스트에서 실행 순서를 신경 쓰면 글로벌 변수를 비슷한 방식으로 설정했습니다. –

+0

설명서가 좋지 않습니다. 그렇습니까? 실제로 Google이 원래 개발 한 것에 대해서는 정보가 부족합니다. 그러나 GCC의 링커'wrap' 옵션을 사용하는 모의 함수가 너무나 멋져서 더 나은 시스템을 찾을 수 없다는 것을 의미합니다. – Mawg

관련 문제