내 프로젝트에 C 파일이 있습니다. 그리고 일부 파일에는 정적으로 정의 된 함수가 있습니다.CppUnit으로 정적 함수 테스트
단위 테스트에서 CppUnit을 사용하고 있으며이 정적 함수를 테스트하고 싶습니다. 파일 외부에서 함수를 호출하는 것은 허용되지 않는다는 것을 알고 있습니다. 내 C++ 테스트 파일에서 이러한 정적 함수를 호출하기 위해이 문제를 피하는 솔루션이 있습니까?
내 프로젝트에 C 파일이 있습니다. 그리고 일부 파일에는 정적으로 정의 된 함수가 있습니다.CppUnit으로 정적 함수 테스트
단위 테스트에서 CppUnit을 사용하고 있으며이 정적 함수를 테스트하고 싶습니다. 파일 외부에서 함수를 호출하는 것은 허용되지 않는다는 것을 알고 있습니다. 내 C++ 테스트 파일에서 이러한 정적 함수를 호출하기 위해이 문제를 피하는 솔루션이 있습니까?
우리는 C 정적 함수에 대해 이야기하고 있다고 가정하면 가장 쉬운 해결책은 디버그 빌드를 컴파일 할 때 함수를 정적이 아니게 만드는 것입니다. 즉, 단위 테스트에서 사용할 기호를 사용할 수 있습니다. 이것은 심볼의 앨리어싱이없는 경우에만 작동합니다.
모든 디버그에 기호 DEBUG
다음과 같이 빌드 정의하면이
debug_export void foo(void)
{
...
}
같은 정적 함수를 정의 다음
#ifdef DEBUG
#define debug_export
#else
#define debug_export static
#endif
과 및 중 하나는 헤더 파일에 조건부로 선언을 포함 단위 테스트 파일에서 수동으로 가져 오거나 :
extern void foo(void);
다른 방법으로는 소스 파일 자체에 유닛 테스트를 포함 시키거나 (손이 닿지 않으면 엉망이된다), 함수를 테스트하는 단위를 사용하지 말고 (cop-out 비트) 또는 표시해야한다. 정적이 아닌 as dll-local 함수를 사용하고 단위 테스트가 해당 동적 객체의 일부인지 확인하십시오.
감사합니다. 나는 당신의 답을 바탕으로 한 해결책에 영감을 불어 넣었습니다. 자세한 내용은 내 대답보기 – MOHAMED
내 프로젝트의 모든 소스 파일에 포함 된 공통 헤더 파일이 있습니다. 이 줄을 추가하고 문제가 해결되었습니다.
#ifdef TEST
#define static
#endif
원본 C 코드에 위의 코드를 추가하는 것을 피할 수도 있습니다. gcc 명령에 플래그 -Dstatic=
을 추가 할 수 있으며이 방법도 잘 작동합니다. 우리는이 개 별도의 파일에 정적으로 정의 된 같은 변수/함수 이름을 가질 수 있습니다
은 그러나 우리는 때문에이 솔루션을 사용할 때주의해야한다.
정적 메서드의 필요성을 제거하기 위해 코드를 리팩토링하는 방법이 있습니까? 객체 지향 설계 관점에서 보자면, 통계는 양의 옷을 입은 전역입니다.
필자는 실용적이지 않거나 가장 빠를 대답은 아니지만 그것을 제거하여 디자인을 개선 할 것이라고 확신합니다.
[개인 메소드, 필드 또는 내부 클래스가있는 클래스를 테스트하려면 어떻게합니까?] (https://stackoverflow.com/questions/34571/how-do-i-test-a-class-that) -has-private-methods-fields-or-inner-classes) – Raedwald