1

現在、SQL CEデータベースを使用するアプリを作成中です。このデータベースをアプリケーションでデプロイ可能にしましたが、現時点で発生している問題は、TestMethodsを実行する必要があることですが、これはエラーになります。デバッグ中またはリリース中の「testingProject」フォルダでデータベースが見つからない場合、それはデータディレクトリです。

using (SqlCeConnection sqlCon = new SqlCeConnection(@"Data Source=|DataDirectory|\database.sdf;Persist Security Info=False;"))

上記のコードは私の接続文字列なので、テストが実行され、独自のデータディレクトリでデータベースを検索していることを意味していると思います

データベース接続文字列、データベースの場所を変更せずに、アプリケーションをデプロイ可能のままにしておくことなくできることについて何か助けはありますか?または私は不可能なことを求めていますか?

編集

[TestMethod]
        public void TestForReadingFromDB()
        {
            List<string> list = class.readDB();
            Assert.IsNotNull(list);
            Assert.AreNotEqual(0, list.Count);
        }

現在失敗しているテストメソッドに追加されました

4

2 に答える 2

2

テストプロジェクトでは、を使用してDataDirectoryの場所を上書きできます

AppDomain.CurrentDomain.SetData("DataDirectory", <PATH_TO_DATA_DIRECTORY>);

たとえば、私のapp.configファイルには、私が持っているテストプロジェクトがあります

  <appSettings>
    <add key="DataDirectory" value="..\..\Database"/>
  </appSettings>

私のテストフィクスチャベースには、次のものがあります。

var dataDirectory = ConfigurationManager.AppSettings["DataDirectory"];
var absoluteDataDirectory = Path.GetFullPath(dataDirectory);
AppDomain.CurrentDomain.SetData("DataDirectory", absoluteDataDirectory);

これにより、DataDirectoryがテストプロジェクトのフォルダー構造の下にあるフォルダー/Databaseに設定されます。

そこにデータベースのコピーをドロップまたは作成すると、統合テストを簡単に実行できます。

于 2012-05-29T12:46:22.027 に答える
1

これは、初期化データクラスでテストするデータディレクトリパスを指定する方法です

public class TestClasse
{
    public TestClass()
    {
         GetAppDataDirectoryForTesting();
    }

    private static string GetAppDataDirectoryForTesting()
    {   //NOTE: must be using visual studio test tools for this to work
        string path = AppDomain.CurrentDomain.BaseDirectory;
        var dirs = path.Split(Path.DirectorySeparatorChar);

        var appDataPath = "";
        for (int i = 0; i < dirs.Length - 3; i++)
        {
            appDataPath += dirs[i] + Path.DirectorySeparatorChar.ToString();
        }

        appDataPath = appDataPath + "[foldername(i.e. in my case project name)]" + Path.DirectorySeparatorChar.ToString() + "App_Data";
        return appDataPath;
    }


    [TestMethod]
    public void SomeTestMethod()
    {
        ....test code 
    }
}
于 2012-05-29T13:01:59.047 に答える