2011-03-18 4 views
3

C++ 코드의 단위 테스트를 수행하기 위해 스크립팅 언어를 활용하고 싶습니다. 필요한 C++ 기능에 액세스 할 수 있다면 스크립트 언어로 테스트를 개발하는 것이 더 쉬울 수 있습니다.스크립팅 언어를 사용한 C++ 단위 테스트

Ruby 나 Perl을 염두에두고 있습니다. (내가 익숙하기 때문에). 그것은 SWIG C + + 코드와 인터페이스를 사용할 수있는 것 같습니다.

SWIG에 대한 더 좋은 대안이 있습니까? 이 목적을 위해 개인적으로 사용하는 스크립팅 언어는 무엇입니까?

마지막으로이 접근 방식을 테스트에 사용하는 것이 적절합니까 (효율적입니까)?

답변

3

Inline:CPP은 Perl에서 C++ 코드를 호출하는 비교적 간단한 방법을 제공합니다.

나는 다음 (또는 테스트 스크립트의 내부에 해당하는 지시어)를 사용하여 스크립트를 실행하는 것이 좋습니다 :

perl -MInline=FORCE,NOISY,NOCLEAN test.pl 
1

C 코드를 작성하고 C++ 컴파일러로 컴파일하는 경우 테스트를 위해 다른 언어를 사용할 수 있습니다.

그러나 C++ 스타일로 작성된 코드에는 해당되지 않습니다.

정확하고 누출되지 않은 복사 구성, 할당, 과부하가 걸린 운영자는 어떻게 테스트합니까? 템플릿은 무엇입니까? C++과 같은 방식으로 스크립팅 언어를 호출하지는 않지만 많은 사람들이 pass-by-value라는 개념조차 가지고 있지 않습니다.

궁극적으로 코드를 사용하기 위해 환경에서 테스트하십시오.

+0

감사합니다 당신을위한 통찰력. 그렇습니다. 스크립팅 언어를 사용하여 심층적 인 단위 테스트를 수행하는 것은 불가능합니다. 기능적/구성 요소 테스트는 어떻습니까? – ravil

+0

@ravil : 인터페이스에 따라 다릅니다. 인터페이스가 C와 같은 서명으로 전역 함수를 호출하는 것으로 구성된 경우 적절한 바인딩을 생성 한 후 모든 언어에서이를 수행 할 수 있습니다. 인터페이스에 소비자에 의한 클래스 인스턴스 생성 및 제거가 포함되어있는 경우에도 인터페이스를 래핑 할 수는 있지만 자동 래퍼 생성기가 부족하기 때문에 많은 작업이 필요합니다. –

+1

사실 ChaiScript는 C++ 코드를 테스트하는 것처럼 C++ 코드를 테스트 할 수 있다고 믿습니다.ChaiScript의 모든 함수 호출은 C++ 함수 호출에 직접 매핑됩니다. 주요 차이점은 ChaiScript가 스택 기반 언어가 아니라는 것입니다. 모든 객체는 힙에 만들어지고 스택은 C++에서 기대하는 것과 일치하도록 에뮬레이트됩니다. – lefticus

2

Perl 코드를 테스트하는 것과 비슷한 방식으로 C++ 코드를 테스트하려면 TAP을 출력하도록 설계된 라이브러리를 사용할 수 있습니다.

page listing the TAP producers에서 보면 only one designed specifically for C++ 인 것으로 보입니다.

GitHub page for libtap++을보고 싶을 수도 있습니다. Test::Harness에서 제공 prove에 의해 구문 분석 할 수

 
1..3 
ok 1 - This test passes 
ok 2 - foo() should be 1 
ok 3 - bar() should be "a string" 

: 같은 것을 생산

.


가장 중요한 부분은 이미 사용하고있는 언어 이외의 다른 언어를 배워야 할 필요가 없다는 것입니다.

+1

답장을 보내 주셔서 감사합니다. 흥미로운 접근 방법이지만, 필자는 libtap ++만으로는 충분하지 않을 것이라고 생각합니다. 스크립팅 언어로 모든 테스트를 작성하려는 주된 이유는 코딩 용이성, 유연성, 문자열 분석 (출력 확인) 및 개발 속도 때문입니다. 그러나 제공된 링크에서 [libPerl ++] (https://github.com/Leont/libperl--)를 확인했는데 Perl API와의 인터페이스를위한 깔끔한 라이브러리처럼 보입니다. – ravil

+1

@ravil을 사용하면 Perl을 사용하여 C++ 테스트 프로그램을 생성 할 수 있습니다. –

관련 문제