2017-11-20 10 views
1

누락 된 기술을 내 레퍼토리에 추가하려고합니다. 그 중 하나는 적절한 병렬 테스트 프로젝트를 설정하는 것입니다.테스트 프로젝트에서 개인 정적 메서드에 액세스하는 데 문제가 있습니다. 직접 호출하지 않더라도

하나의 프로젝트 (EffCPP)에서 일부 C++ 개념을 실험하기위한 간단한 설정이 있으며 모든 관련 파일에 액세스하고 테스트 할 수있는 다른 프로젝트에서 Google 테스트 프로젝트 (테스트)를 설정하려고합니다.

불행하게도, 성공적으로 테스트 프로젝트를 설정 한 후, 나는 문제가 테스트 하나에 EffCPP 프로젝트에서 데이터를 구성하는 데 시작했다.

특히, 내 테스트 프로젝트가 공용 생성자가 액세스하는 개인 정적 메서드를 연결할 수 없다는 링커 오류가 발생했습니다.

여기 컴파일 과정에 대해 뭔가 빠뜨린 것이 확실하지만 해결책은 분명치 않은 것처럼 보이고 쿼리 자체는 Google에 어렵습니다. 그것은 내가이 문제가되는 상황의 간단한 예제를 만들려고 할 것을 제안했다 https://github.com/Vidrohi/EffectiveCPP.git

:

내가 여기있는 모든이의 GitHub의 저장소를 가지고있다.

///////////////////////// EffCPP //////////////////////////////// 


///////////////////////// ClassToBeTested.h //////////////////////////////// 


class ClassToBeTested 
{ 
private: 
    unsigned int m_id; 

    static unsigned int s_currentId; 
    static unsigned int GetNextId(); 

public: 

    ClassToBeTested():m_id(GetNextId()) 
    {} 
} 

///////////////////////// ClassToBeTested.cpp //////////////////////////////// 

#include "ClassToBeTested.h" 

unsigned int Performance::NonPOD::s_currentId = 0; 

unsigned int Performance::NonPOD::GetNextId() 
{ 
    return ++s_currentId; 
} 

///////////////////////// TestProject //////////////////////////////// 

///////////////////////// Tests.cpp ///////////////////////// 

#include "gtest/gtest.h" 
#include "../EffCPP/Chapter6/ClassToBeTested.h" // Just the path where that header is located really 

std::string name("NAME"); 
TEST(name, name) { 
    EXPECT_EQ(1, 1); // Just to make sure the test framework is running correctly 

    ClassToBeTested cp; 
} 

편집 : 2 : 다음은 내 같은 설명에 시도 흥미롭게도 내가 대해 거의 같은 문제 link 그러나 이것은 단지 내가으로 구축하는 세 번째 프로젝트를 설정 제안을 이야기 또 다른 질문을 발견 lib 디렉토리에 정적 lib 디렉토리를 연결하십시오.

+1

으로 모두를 구축 할 수 있습니다. 귀하의 질문에 [mcve]와 [edit]을 입력하십시오. – Angew

+0

흠, 흥미 롭습니다. 문제가 프로젝트 설정과 관련되어 있다면, #include 설정이나 링커 설정과 관련이 있습니다. 프로젝트에 액세스하지 않고 어떻게 진단 할 수 있습니까? – Vidrohi

+0

MCVE는 여전히 여러 개의 파일로 구성 될 수 있습니다. 그러나 모든 파일을 최소화해야합니다. 즉, 한 가지만 꺼내면 문제가 사라집니다. 그런 * minimal * 예제를 준비하고 나면 두 가지 결과가 발생할 수 있습니다. 프로세스에서 직접 문제를 파악하거나 (좋은 결과) 좋고 신뢰할 수있는 SO 질문에 대한 자료를 얻을 수 있습니다. 그러나 다른 사람들에게 똑같이하도록 요청하기 전에 먼저 시간을 투자하십시오. 예, 시간 소모적 일 수 있습니다. (제 질문에 MCVE를 만드는 데 많은 시간을 썼습니다.)하지만 SO (또는 전반적인 도움을 요청하는 방법)가 작동하는 방식입니다. – Angew

답변

0

이 문제에 대한 가능한 해결책 중 하나는 EffCPP 프로젝트에서 실행 파일을 만들지 않고 대신 정적 라이브러리를 만드는 것입니다. 그런 다음이 정적 라이브러리를 테스트 프로젝트에 쉽게 제공 할 수 있으며 테스트 프로젝트를 링크하여 exe로 실행할 수 있습니다.

다른 해결책은 question에서 찾을 수 있지만 세 번째 프로젝트를 만들어야합니다. 난 아직도 방법을 찾고 있어요

은 두 개의 프로젝트를 사용하여 우리는 하나의 특정 문제를 찾는 전체 저장소를 다운로드하지 않을 .EXE