2009-06-23 3 views
2

테스트하고 싶은 클래스에 정적 함수로 테스트를 작성하기 시작했습니다. 이러한 기능은 대개 기능을 테스트하고 많은 객체를 만들고 메모리 소비를 측정하여 누출을 감지합니다.테스트 케이스를 해당 클래스에 저장할 수 있습니까? (C++)

좋은 방법입니까 아니면 나쁜 방법입니까? 장기적으로 그것이 나를 물려고합니까?

답변

3

테스트 클래스를 배포 가능한 아티팩트에 포함시키지 않기 때문에 별도로 유지합니다. .exe의 크기를 늘리거나 고객이 사용할 수 있도록 만드는 것은 의미가 없습니다.

CppUnit으로 단위 테스트를 작성하는 것이 좋습니다.

1

저는 이것이 최선의 방법은 아니지만 프로그램을 중단 시키거나 충돌을 일으키지 않는다는 점에서 "괜찮습니다"라고 말합니다. 괜찮은 일이 많이 있지만,해서는 안됩니다.

0

이것은 나쁜 습관입니다.

만들고있는 클래스를 테스트하려면 별도의 클래스가 있어야합니다. 당신이하는 일은 테스트 코드로 생산 코드를 팽창시키는 것입니다. 이것은 당신이해야하는 것이 아닙니다.

당신이 푸이처럼 클래스 테스트 할 방법 :

//Foo.cpp 
class Foo { 
    public: 
    int GetInt() { return 15; } 
}; 

//FooTest.cpp 
TEST(FooTest, testGetIntShouldReturn15) { 
    Foo foo; 
    ASSERT_EQUAL(15, foo.GetInt()); 
} 
1

테스트 코드 등등 소유, 배포, 비 기능적 요구 사항의 관점에서 생산 코드에서 근본적으로 다른입니다. 따라서 별도의 파일 및 별도의 디렉토리에서 테스트중인 코드와 별도로 유지하는 것이 좋습니다.

테스트중인 클래스에 대한 화이트 박스 단위 테스트를 용이하게하려면 종종 테스트 클래스/테스트 함수를 친구로 선언해야합니다. 일부 수업은 공개 회원 만 단위 테스트가 가능하기 때문에 친구를 추가하는 것이 항상 필요한 것은 아닙니다.

테스트 코드와 테스트중인 코드를 결합하는 것은 간단합니다. 동일한 프로젝트에서 오브젝트 파일을 함께 연결하기 만하면됩니다.

가끔 단위 테스트 코드 #include이 테스트중인 코드를 볼 수는 있지만 그에 대한 조언이됩니다. 예를 들어, 테스트 커버리지 측정 툴링이있는 곳에서 사용하면 (대단히 좋습니다!), 측정 값이 올바르지 않습니다. 테스트중인 코드의 경우.

+0

"때때로 테스트중인 코드를 # 포함하는 유닛 테스트 코드를 볼 수 있지만 그에 대한 조언을 드리겠습니다." 단위 테스트에서 클래스를 어떻게 사용 하시겠습니까? –

+0

@Edison : 같은 컴파일 단위에 정의 된 다른 클래스를 사용하는 것과 같습니다. 어떤 의미에서는 테스트중인 클래스와 테스트 클래스가 동일한 소스 파일에 있지만 별도의 클래스로 존재하는 것과 같습니다. – laalto

+0

나는 그것들을 별도의 클래스로 가지고 있기로 동의하지만 Foo.cpp가 다른 파일에 있기 때문에 어떻게 Foo.cpp를 테스트 할 수 있는지 이해할 수 없다. 그래서 내 'FooTest.cpp'에서 Foo를 테스트하기 위해 #include "Foo.h"가 필요합니다. –

1

클래스 내에 테스트 케이스가 있다면 조명기와 같은 것을 가지는 것이 어렵습니다.

나는 또한 Boost.Test으로 큰 소리로 외쳤습니다. 학습 곡선은 조금 높지만 한번 익숙해지면 놀랍습니다.

관련 문제