2013-11-20 4 views
0

최근에 gtest를 사용하기 시작했는데 문제가 발생했습니다. 폴더에있는 파일에 대한 일련의 테스트를 실행하고 싶습니다.이 테스트는 발생할 수 있도록 열거되어야합니다. 필자는 테스트를 만들고 파일 목록의 데이터로 인스턴스를 생성했지만 개념적 종류의 문제가 발생했습니다.매개 변수화 된 테스트를 위해 데이터를 준비해야합니까?

내가 한 것은 testing::InitGoogleTest이 호출되기 전에 파일 이름을 저장하고 채우기 위해 전체 목록을 작성하는 것이 었습니다. 그 작품.

그러나 전역 변수를 사용한다는 사실은 저를 괴롭 히고 있습니다. 목록 초기 설정을 testing::Environment의 자손으로 옮기기 위해 노력했지만 테스트 인스턴스화가 실패하게되었습니다. 더 정확하게 말하면,리스트는 채워졌지만 그것으로부터의 데이터를 사용하여 테스트가 수행되지 않았습니다.

그래서, 내 질문은 :

  1. 는 어떤 종류의 데이터는 testing::Environment의 서브 클래스를 보류하기로되어있다?
  2. 동적으로 생성 된 목록으로 매개 변수화 된 테스트를 초기화하는 올바른 방법은 무엇입니까?

답변

0
  1. 전적으로 귀하에게 달려 있습니다.
  2. '적절한'방법은 없습니다. 전역 변수를 싫어하면 디스크에서 테스트 매개 변수를로드하고 컨테이너 (벡터, 목록 등)에 반환하고 테스트 인스턴스화 매크로에서 해당 메서드를 사용하는 전역 함수 또는 정적 클래스 메서드를 만들 수 있습니다.

예컨대 :

std::vector<std::string> LoadValuesFromDisc() { 
    std::vector<std::string> result; 
    // Fill in result with data here... 
    return result; // RVO will ensure there are no unnecessary copies. 
} 

INSTANTIATE_TEST_CASE_P(
    InstantiationName, TestFixture, testing::ValuesIn(LoadValuesFromDisc()); 
+0

는 정직, 반 직관적 보인다. 어쩌면 프레임 워크의 이러한 부분들이 어떻게 상호 작용해야하는지에 대한 나의 기대는 현실과 다를 것입니다. 어쩌면 나는 동적으로 생성 된 목록에 대한 테스트를 시작할 수 있다는 것에 감사해야 할 것입니다. – Srv19

관련 문제