2017-11-18 4 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. 

これは、「間違って形成されたユニバーサル文字名」というエラーを生成しました。

ユニバーサル文字?彼らはbackslaをどうするよ...おお....

だから私は(/ \の代わりに注意してください)ので、私のような機能を試してみました:

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

そして、それは働きました!
ユニットテストディレクトリ(..)の上のディレクトリを参照するだけで、バックスラッシュではなくスラッシュを使用するだけです。

今後も他の人に同様の問題が発生する可能性があるので、この質問を投稿したいと考えています。


さらに興味深いことに、これは二重バックスラッシュを使用して達成できました...\\このようなフォーラムでは必要です...どうやら窓はそれらを同じ方法(ish)で扱います。

だから、答えはむしろ使用するよりも、次のとおりです。

"..\filename" 

使用この:

"..\\filename" 

またはこの:

"../filename" 
関連する問題