2017-11-18 6 views
0

단위 테스트와 함께 Visual Studio를 사용하고 있습니다. 테스트중인 프로젝트 안에 디렉터리가있는 테스트 프로젝트를 만들었습니다.VS 장치 테스트에서 데이터베이스 (sqlite3)를 열 수 없습니다.

데이터베이스 파일을 열고 데이터베이스 내용을 기반으로 클래스 개체를 만드는 함수를 "단위 테스트"하려고합니다. 함수 자체가 실제로 정상적으로 작동합니다.

bool import_materials_from_db(const char *db_name){ 
    sqlite3 *db; 
    int rc = sqlite3_open_v2(db_name, &db, 2, NULL); 
    if (rc != SQLITE_OK) { 
     std::cout << "The database \"" << db_name << "\" was not found.\n"; 
     return false; 
    } 
} 

필자는이 기능을 크게 축소했습니다.이 기능이 실패한 부분입니다. RC는 오류 코드 SQLITE_CANTOPEN (14)을 나타냅니다. 함수에 전달 된 다른 것은 std :: vector <> 내 클래스를 포함하고 있습니다. 특히 중요하다고 생각하지 마십시오.

나는 기능과 같이 호출이 주요 응용 프로그램 내에서 잘 작동하지만, 최대한 빨리 내 단위 테스트에서 그것을 시도로

import_materials_from_db("materials.db"); 

:

import_materials_from_db("test_database.db"); 

나는 운이 없다.

프로젝트 디렉토리 :

Advanced_Task_1\ 

단위 테스트 디렉토리 :

Advanced_Task_1\UnitTest1\ 

나는 단지의 경우 각 디렉토리에 데이터베이스 파일을 배치 노력했다. ".. \ test_database.db"등을 전달하려고 시도했습니다. 마지막으로 언급 할 가치가있는 것은 이것이 올바른 파일 이름이고 확신 할 수있는 데이터베이스 내부의 정보입니다. 아직도 운이 없다.

정확히 내가 잘못하고있는 것에 대한 아이디어가 있습니까? 프로젝트 설정에서 ".. \"처럼 위의 디렉토리를 보았습니다.하지만 그 중 하나도 마음에 들지 않았습니다.

답변

0

실제로 질문을 작성하는 동안 답변을 발견했습니다.

전체 경로를 삽입하려고 시도했습니다.

"C:\Users\Documents\VisualStudioProjects" etc. 

이로 인해 "잘못 구성된 범용 문자 이름"오류가 생성되었습니다.

유니버설 문자?

import_materials_from_db("../test_database.db"); 

그리고 그것은 일 : 그들은 ((가)/대신 \의주의)

그래서 내가 그렇게처럼 내 기능을 시도 .... backsla ... 오와 함께 할 수있는 좋은 방법입니다!
단위 테스트 디렉토리 (..) 위의 디렉토리를 참조하고 백 슬래시 대신 슬래시를 사용하기 만하면됩니다.

다른 사람들도 앞으로 비슷한 문제가 발생할 것이라고 확신하므로이 질문을 게시하고 싶습니다.


더욱 흥미로운 점은 이중 백 슬래시를 사용하여 달성 할 수있는 것입니다.\\이 포럼에서 필요합니다 ... 분명히 창문들은 같은 방식으로 취급됩니다 (ish).

그래서, 대답은 오히려 사용하는 대신입니다 :

"..\filename" 

사용이 :

"..\\filename" 

나이 :

"../filename"