2014-09-26 6 views
0

이번 질문에 처음으로 질문을 올리니 제 질문을 개선 할 수 있는지 알려주십시오.CMock/Unity를 Automake와 어떻게 통합합니까?

원시 파일을 조롱 된 버전으로 교체해야하는 단위 테스트를 어떻게 체계적으로 구축하는지에 대한 지침을 찾고 있습니다. CMock에 의해 생성 된 소스 파일의. CMock에서는 모의를 사용하는 단위 테스트 코드가 원본 소스 대신 모의 소스와 연결되어야하기 때문에 필요합니다. 내가 모의 foo는에 다음 테스트 소스 파일 foo는()를 호출 기능 test_me(), TEST.C을 테스트입니다 경우

예를 들어,() I입니다) (test_test_me: test_me.c, Mockfoo.c, and test.c.

test_me을 컴파일해야합니다 일반적으로 다음과 같이 컴파일됩니다 test_me: test_me.c and foo.c

Mockfoo.c는 foo.h를 사용하여 CMock에서 제공 한 Ruby 스크립트를 사용하여 생성됩니다.

테스트 프로그램을 만들려면 foo.cMockfoo.c으로 바꾸어야합니다. test_test_me. test_test_me가 원래 foo 호출이 아니라 foo의 조롱 된 호출에 링크 할 수 있도록 Mockfoo.c가 필요합니다. 종속성의 수가 증가하면 소스 대체가 어려워집니다.

예를 들어, test_me가 foo.o, bar.o 및 baz.o로 구성된 라이브러리 libfoo.a의 foo, bar 및 baz를 사용하고 foo에 대한 호출을 모의하려는 경우 컴파일 단위 Mockfoo.o, bar.o 및 baz.o를 사용하여 libfoo.a를 빌드하여 모의 foo 호출을 사용하는 test.o에 링크해야합니다. Mockfoo, Mockbar, baz가 아닌 Mockfoo, Mockbar)와 다른 automake 규칙, 플래그 등이있는 큰 소스 트리가있는 경우 더욱 복잡해집니다.

또한 mock 추가는 mocks가 필요하므로 간단해야합니다. 우리 단위 테스트에 종종 필요합니다.

일부 컨텍스트 :

나는 코드가 리팩토링하거나 새로운 코드가있는 난 그냥 합류하는 큰 C 프로젝트에 추가되는 경우에 단위 테스트를 추가 CMock/Unity 사용에 관심이 있어요.

이 프로젝트는 현재 Automake를 빌드 도구로 사용하며 여기에 머물러 있습니다.

저는 Automake를 처음 사용했습니다. 나는 SCons와 CMock에 익숙하다.

답변

1

질문이 꽤 오래 게시되었습니다. 나는 비슷한 질문에 직면 한 다른 모든 사람들을 위해 나의 해결책을 게시 할 것이다.

CMock/Unity와의 가장 확실한 인터페이스는 Ruby 기반 빌드 도구 인 rake를 사용하는 것입니다. 레이크는 Makefile.am에서 호출 할 수 있습니다. 유닛 테스트를 빌드하기 위해 지정된 각 가짜 타겟에 대해 레이크를 호출하는 타겟을 만들 수 있습니다.

빌드 환경 제한으로 인해 필자는 레이크를 사용할 수 없었습니다. 대신, 나는 CMock/Unity에서 제공되는 기능을 가지고 있으며 automake와 쉽게 통합되는 cmocka을 사용하기로 결정했습니다.

+0

동의합니다. 루비 도구를 사용하십시오. 해당 레이크 기반 빌드 도구를 Ceedling이라고합니다. 나는 그것을 시작하기위한 연습이있다 : http://www.electronvector.com/blog/try-embedded-test-driven-development-right-now-with-withling 함께 사용할 수 없다. 테스트를 실행하기 위해 사이드 Automake를 사용하십시오. Ceedling 프로젝트의 "vendor"폴더를 프로젝트에 놓은 다음 project.yml과 rakefile을 가져옵니다.rb 파일도 포함됩니다. 그런 다음 프로젝트 트리와 일치하도록 project.yml 폴더에서 소스 및 테스트 폴더 구성을 변경하십시오. – cherno