2010-03-20 9 views
19

파이썬의 unittest 라이브러리 (Windows)를 사용하여 단위 테스트를하고 싶은 C 코드 더미가 있는데, 최선의 방법을 찾으려고 노력 중입니다. 파이썬이 그것을 실행할 수 있도록 (그리고 결과를 다시 얻을 수 있도록) C 코드를 인터페이싱한다. 아무도 그것을 할 수있는 가장 쉬운 방법으로 경험이 있습니까?C 코드를 파이썬으로 테스트하는 가장 쉬운 방법

몇 가지 아이디어는 다음과 같습니다

  • 파이썬 API
  • 랩 C 코드에 DLL 래퍼를 추가로로드 꿀꺽 꿀꺽
  • 를 사용하여 C 코드를 사용하여 파이썬 C의 확장으로 코드를 포장 파이썬 사용하는 ctypes는
  • 은 (예, 나는이 조금 멀리 아웃을 보인다 알고있다!)이 C 코드에 작은 XML-RPC 서버를 추가하고 XMLRPCLIB를 사용하여 전화

이것을 수행 할 수있는 표준 방법이 있습니까? 서로 다른 C 모듈을 사용하여이 작업을 상당히 많이 수행 할 것이므로 최소한의 노력으로 해결 방법을 찾고 싶습니다.

답변

5

정확한 해결책은 코드에 달려 있다고 생각합니다. 모든 라이브러리가 DLL로 랩핑하기에 적합하지는 않습니다. 그렇다면 ctypes은 확실히 가장 쉬운 방법입니다. DLL을 라이브러리에서 제거한 다음 ctypes으로 테스트하십시오. 추가 보너스는 이제 응용 프로그램을 분리하는 데 도움이되는 독립 실행 형 DLL로 편리하게 래핑 된 라이브러리를 갖게된다는 것입니다.

그러나 때때로 C 코드와 테스트 Python 코드 사이에 더 철저한 상호 작용이 필요할 수 있습니다. 그렇다면 SWIG가 프로세스에 대해 지루할 수있는 대부분의 것들을 자동화하는 꽤 좋은 도구 인 확장 기능으로 연결하는 것이 가장 좋습니다.

9

ctypes를 사용하면 첫 번째 본능이되지만, 처음에 파이썬에서 인터페이싱하지 않을 C 코드를 테스트 중이라면 check을 사용합니다. Check에는 segfault가있는 테스트 사례를 올바르게보고 할 수 있다는 장점이 있습니다. 이는 별도의 프로세스에서 각 테스트 케이스를 실행하기 때문입니다.

어쨌든 C 코드 용 파이썬 래퍼를 만들려면 래퍼를 unittest하면됩니다. 위에서 나열한 메소드 외에도 Cython을 사용하여 Python과 유사한 코드로 래퍼를 작성한 다음 Python에서 unittest 할 수도 있습니다.

+0

많은 경우 (즉, 수천)의 테스트 케이스가있는 경우 느리지는 않습니까? 심지어 수백? – Arafangion

+0

수표 링크 업데이트 : https://libcheck.github.io/check/ –

관련 문제