테스트하고 싶은 클래스에 정적 함수로 테스트를 작성하기 시작했습니다. 이러한 기능은 대개 기능을 테스트하고 많은 객체를 만들고 메모리 소비를 측정하여 누출을 감지합니다.테스트 케이스를 해당 클래스에 저장할 수 있습니까? (C++)
좋은 방법입니까 아니면 나쁜 방법입니까? 장기적으로 그것이 나를 물려고합니까?
테스트하고 싶은 클래스에 정적 함수로 테스트를 작성하기 시작했습니다. 이러한 기능은 대개 기능을 테스트하고 많은 객체를 만들고 메모리 소비를 측정하여 누출을 감지합니다.테스트 케이스를 해당 클래스에 저장할 수 있습니까? (C++)
좋은 방법입니까 아니면 나쁜 방법입니까? 장기적으로 그것이 나를 물려고합니까?
아니요, 대신 unit tests을 작성해야합니다.
테스트 클래스를 배포 가능한 아티팩트에 포함시키지 않기 때문에 별도로 유지합니다. .exe의 크기를 늘리거나 고객이 사용할 수 있도록 만드는 것은 의미가 없습니다.
CppUnit으로 단위 테스트를 작성하는 것이 좋습니다.
저는 이것이 최선의 방법은 아니지만 프로그램을 중단 시키거나 충돌을 일으키지 않는다는 점에서 "괜찮습니다"라고 말합니다. 괜찮은 일이 많이 있지만,해서는 안됩니다.
이것은 나쁜 습관입니다.
만들고있는 클래스를 테스트하려면 별도의 클래스가 있어야합니다. 당신이하는 일은 테스트 코드로 생산 코드를 팽창시키는 것입니다. 이것은 당신이해야하는 것이 아닙니다.
당신이 푸이처럼 클래스 테스트 할 방법 :
//Foo.cpp
class Foo {
public:
int GetInt() { return 15; }
};
//FooTest.cpp
TEST(FooTest, testGetIntShouldReturn15) {
Foo foo;
ASSERT_EQUAL(15, foo.GetInt());
}
테스트 코드 등등 소유, 배포, 비 기능적 요구 사항의 관점에서 생산 코드에서 근본적으로 다른입니다. 따라서 별도의 파일 및 별도의 디렉토리에서 테스트중인 코드와 별도로 유지하는 것이 좋습니다.
테스트중인 클래스에 대한 화이트 박스 단위 테스트를 용이하게하려면 종종 테스트 클래스/테스트 함수를 친구로 선언해야합니다. 일부 수업은 공개 회원 만 단위 테스트가 가능하기 때문에 친구를 추가하는 것이 항상 필요한 것은 아닙니다.
테스트 코드와 테스트중인 코드를 결합하는 것은 간단합니다. 동일한 프로젝트에서 오브젝트 파일을 함께 연결하기 만하면됩니다.
가끔 단위 테스트 코드 #include
이 테스트중인 코드를 볼 수는 있지만 그에 대한 조언이됩니다. 예를 들어, 테스트 커버리지 측정 툴링이있는 곳에서 사용하면 (대단히 좋습니다!), 측정 값이 올바르지 않습니다. 테스트중인 코드의 경우.
클래스 내에 테스트 케이스가 있다면 조명기와 같은 것을 가지는 것이 어렵습니다.
나는 또한 Boost.Test으로 큰 소리로 외쳤습니다. 학습 곡선은 조금 높지만 한번 익숙해지면 놀랍습니다.
"때때로 테스트중인 코드를 # 포함하는 유닛 테스트 코드를 볼 수 있지만 그에 대한 조언을 드리겠습니다." 단위 테스트에서 클래스를 어떻게 사용 하시겠습니까? –
@Edison : 같은 컴파일 단위에 정의 된 다른 클래스를 사용하는 것과 같습니다. 어떤 의미에서는 테스트중인 클래스와 테스트 클래스가 동일한 소스 파일에 있지만 별도의 클래스로 존재하는 것과 같습니다. – laalto
나는 그것들을 별도의 클래스로 가지고 있기로 동의하지만 Foo.cpp가 다른 파일에 있기 때문에 어떻게 Foo.cpp를 테스트 할 수 있는지 이해할 수 없다. 그래서 내 'FooTest.cpp'에서 Foo를 테스트하기 위해 #include "Foo.h"가 필요합니다. –