2017-01-11 2 views
1

이전에 작성된 C++ 코드를 수정해야하고 프로그램에 대한 명령 행 인수가 필요합니다. 다른 사람들이 리뷰를하고있을 것이며,이를 용이하게하기 위해,이 코드를 테스트 할 것입니다, 내가 쓴이 ...테스트 목적으로 argv 할당하기

int main (int argc, char *argv[]) 
{ 
    // To do testing just uncomment the below line. 
#define TESTING 
#ifdef TESTING 
    argc = ARGUMENT_COUNT; 
    argv[1] = new char[strlen(INPUT_FILE) + 1 ]; 
    strcpy(argv[1], INPUT_FILE); 
    argv[2] = new char[strlen(MERGE_FILE) + 1 ]; 
    strcpy(argv[2], MERGE_FILE); 
    . 
    . 
    . 
#endif 

내 질문 : 이러한 유형의 테스트를 처리하는 다른 더 좋은 방법이 어디 명령 행 동일한 변수 인 argv이 모든 곳에서 사용됩니다.

참고 : IDE를 지원하지 않습니다. 원격 서버에서 vi 편집기를 사용하고 있습니다.

+1

일반적으로 IDE를 통해 args를 제공 할 수 있습니다. –

+1

지정한 인수를 사용하여 프로그램을 실행하는 스크립트를 만드시겠습니까? –

+0

IDE 없음 ... 코딩을 수행하기 위해 원격 서버에 로그인하고 있습니다. 그리고 저는 거기서 만 시험해야합니다. – NJMR

답변

0

으로 argcargv을 변경할 수 있습니다. 그래도 new[]으로 할당 한 메모리를 해제하는 것을 잊지 마십시오.

하지만 더 나은 대안은 IDE를 통해 또는 시작 스크립트를 통해 인수를 전달하는 것이고 이렇게하면 코드를 해킹하지 않아도됩니다.

main을 (간접적으로, 즉 다른 함수를 통해) 호출하는 동작은 이며 C++에서는입니다. 따라서 그렇게하는 솔루션을 만들지 마십시오.

테스트를 위해 Boost에서 사용할 수있는 제품군을 사용합니다. www.boost.org를 참조하십시오.

+0

보안 목적을위한 써드 파티 라이브러리가 없음 ...--) – NJMR

+0

글쎄, 나는 언어 표준에 따라 argc 인자를 변경할 수 있다고 확신한다. 입력 인수의 값을 변경하지 못하도록하는 것은 없습니다. 'argv'가 가리키는 메모리 블록의 내용은 실제로 "불변"입니다. –

+0

"글쎄, 나는 언어 표준조차도 argc 인수를 바꿀 수 있다고 확신한다." 예, 맞습니다. – Bathsheba

2

명령 줄 인수를 처리하는 코드를 별도의 함수에 넣습니다. 값을 저장하고 응용 프로그램에 제공하는 클래스의 메서드에서도 마찬가지입니다.
그런 다음이 함수/메서드를 main() 함수에서 호출하십시오. 마지막으로, 준비된 테스트 데이터로 함수를 호출하고 예상 결과를 확인하는 테스트 케이스/함수로 테스트 프로그램을 구현하십시오.

이 방법, 생산 구현 및 테스트가 명확하게 분리되어, 테스트 데이터 등을 제공하기 위해 해킹을 사용할 필요가 없습니다

0

당신의 변수는 argv가 CONST이 될 수 있다면, 당신은 새로운 argv을 만들고 원래 하나를 교체 할 수 있습니다 이렇게. 테스트가 제안 것이 있다면


int main (int argc, const char *argv[]) 
{ 
    // To do testing just uncomment the below line. 
#define TESTING 
#ifdef TESTING 
    const char* args[]={ 
     "arg 1","arg 2","arg 3",nullptr 
    }; 
    argc = sizeof(args)/sizeof(char*); 
    argv = args; 
#endif 
} 

는 사용 테스트 프레임 워크는 더 나은 선택이 될 것입니다.

0

먼저 테스트 프레임 워크를 사용 하겠지만 필자 만의 테스트를 수행하려면 커맨드 라인 인수를 추상화해야 할 것입니다. 인수를 파싱하고 보관하는 클래스를 만듭니다. 의존성 삽입을 사용하여 argv 또는 테스트 데이터를 생성자로 보냅니다.

관련 문제