2009-11-25 6 views
8

나는 문제의 위치를 ​​보여주기 때문에 프로그램의 장점을 알고 있기 때문에 (C로) 단위 테스트를하고 싶다.단위 테스트 - 어떻게 움직이는가?

나는 또한 프로그램이 작동하는지 (적어도 테스트를 위해) 알려주므로 블랙 박스 테스트를 좋아한다.

현재, 의존성을 추가하지 않기 위해 Autotest (Autoconf와 함께 제공)를 사용하고 있습니다.

이 시점에서 나는 더 나은 프레임 워크를 사용하는 것을 좋아하지만 문제는 블랙 박스 및 단위 테스트에 다른 프레임 워크를 사용하고 싶지 않다는 것입니다. 단위 테스트 프레임 워크에서 블랙 박스 테스트를 실행할 수 있습니까? 내가 정말로 원했던 것은 정확한 로그 출력이며, 정확히 무엇이 잘못되었는지, 어디서 잘못되었는지를 말합니다.

다른 옵션은 Autotest로 단위 테스트하는 것입니다. 문제는 프레임 워크가 없다는 것입니다. 필자는 테스트 할 함수의 이름을 받아들이고 함수에 전달할 인수를 받아들이고 함수를 호출하는 작은 "테스트 드라이버"를 작성했습니다. 문제는 어설 션 사이에 어떤 경계를 사용하여 함수의 반환 값을 출력 할 것인지 확신 할 수 없다는 것입니다 (로깅 목적으로, Autotest가 나에게 diff를주는 방식을 좋아하기 때문에). 대부분의 함수는리스트를 반환하기 때문에, 예상 출력을 가진 diff (Autotest를 사용하여 expout)를 사용하여 준비하는 것이 더 빠릅니다.

+0

프로그램 작성 언어는 무엇입니까? – Mathias

+0

어, 나는 그것을 잊어 버린 것을 믿을 수 없습니다. C.로 쓰여진 것. – alternative

+0

다른 프레임 워크를 고려한다면 Wikipedia에는 ​​C에 대한 단위 테스트 프레임 워크 목록이 있습니다. http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks#C autounit이라는 제품도 있습니다. 현재 베타 버전 인 autoconf와 잘 통합됩니다. http://autounit.tigris.org/ http://autounit.tigris.org/files/documents/187/171/autounit.html –

답변

2

단위 테스트 프레임 워크에서 블랙 박스 테스트를 실행할 수 있습니까?

예, 단위 테스트에서 system()으로 Autotest를 호출 한 다음 반환 값을 주장 할 수 있습니다.

하지만 단위 테스트가 자주 실행되기 때문에 권장하지 않습니다. 단위 테스트는 매우 빠르며 즉 분 단위가 아닌 초 단위로 측정됩니다.

유닛 테스트 및 통합 테스트 (블랙 박스 테스트라고 함)는 다른 용도로 사용됩니다. 단위 테스트는 코드에서 단위 코드가 테스트에서 예상대로 작동한다는 것을 확인합니다. 통합 테스트는 전체 프로그램을 포괄적으로 검증하여 프로그램을 포괄합니다.

일반적으로 코드에서 몇 가지 변경 사항이있을 때마다 단위 테스트가 실행됩니다 (특히 TDD를 적용한 경우). 기능 테스트가 추가되면 통합 테스트가 실행됩니다.

본인은 어설 션과 함께 일반적인 단위 테스트 프로그램과 블랙 박스 테스트 이외에도 단위 테스트를 호출하는 통합 제품군을 갖고 싶어합니다.

문제

내가 ( 이후는 자동 측정이 나에게 DIFF을 줄 것이다 방법을 좋아한다, 로깅 목적) 함수의 반환 값을 출력 주장하고 사이에 사용하는 것을 경계 모르겠습니다이다.

어설 션을 사용하면 예상 값과 실제 값이 같거나 아무런 변화가 없거나 메시지가 다르며 UT 프레임 워크에서 오류 메시지 (예상 값은 X, 실제 값은 Y)를 인쇄합니다. 그것은 하나의 컴퓨터가 테스트 작업을하게하는 것입니다.

로깅 출력 diff에서는 수동으로 (시각적으로) diff 결과를 검사해야합니다 (예 : 목록에 누락 된 항목 하나 또는 추가 항목 하나 ...).

대부분의 함수가 목록을 반환하기 때문에 예상 출력 (자동 테스트 사용)을 사용하여 diff 을 사용하여 준비하는 것이 더 빠릅니다.

어설 션을 사용하여 목록을 비교하는 함수를 작성하고자 할 수 있습니다.

0

당신은 CMake 많은 백엔드와 크로스 플랫폼 메이크업 체제와 함께 제공 CTest, 사용할 수 있습니다 : http://www.cmake.org/Wiki/CMake#CTest

PS : CMake 너무 훨씬 더 강력 autotools를보다가.

+0

CMake를 사용하지 않습니다. – alternative

+0

너무 늦지 않을 때까지 스위치를 고려해 볼 수 있습니다 :-) – Flavius