Alex
Alex

Reputation: 828

Deployable database Test Methods

I am currently in the middle of creating an app that uses a sql CE database, I have made this database deploy-able with the application, however the problem I'm having at the moment is I need to run TestMethods but this is erroring out when it doesn't find the database as its looking in the "testingProject" folder under debug or release as that is it's Data Directory

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

The code above is my connection string, so I'm guessing that means that the test is running and searching for a database in its own data directory

Any help on what I could do without changing the database connection string, database location and still leaving my application deployable? or am I asking something impossible?

EDIT

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

just added in the test method that's currently failing

Upvotes: 1

Views: 523

Answers (2)

Brian
Brian

Reputation: 2229

this is how I specify the data directory path for testing in my initialize data class

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 
    }
}

Upvotes: 1

heads5150
heads5150

Reputation: 7443

In the test project you can override the DataDirectory location using

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

For instance in my app.config file the testing projects I have

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

In my test fixture base I have:

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

This sets the DataDirectory to the folder /Database under the test project folder structure.

Once I drop or create a copy of the database in there I can easily run Integration Tests.

Upvotes: 2

Related Questions