black sensei
black sensei

Reputation: 6677

NullReferenceExpection in a Integration test project for an asp.net nhibernate solution

i have a .NET 3.5 solution with an asp.net(web site) project with fluentnhibernate and it's test project(class library project).i've referenced the asp.net project in the test project and with all fluentnhibernate/nhibenate dlls.

What i fail to comprehend is that, on a run of a webform (hit from browser) let's say Test.aspx, building of schema is successfull and i could see the tables in my database. here is the method i call on Test.aspx.cs

public partial class Test : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        ISession session = SessionManager.Instance.OpenSession();
       SessionManager.BuildSchema(session);
    }
}

i happen to use the same method in CanGenerateSchema method of my test class and it always fails

 [TestFixture]
public class CanGenerateSchemaTestSuite
{
    [Test]
    public void CanGenarateSchema()
    {
        ISession session = SessionManager.Instance.OpenSession();
        SessionManager.BuildSchema(session);
    }
}

here is the SessionManager i use :

public sealed class SessionManager
{
    private readonly ISessionFactory _sessionFactory;


    public static ISessionFactory SessionFactory
    {
        get { return Instance._sessionFactory; }
    }


    private ISessionFactory GetSessionFactory()
    {
        return _sessionFactory;
    }

    public static SessionManager Instance
    {
        get { return NestedSessionManager._sessionManager; }
    }

    public ISession OpenSession()
    {
        return Instance.GetSessionFactory().OpenSession();
    }


    private static Configuration SaveConfigs;

    private SessionManager()
    {
        try
        {

            if (_sessionFactory == null)
            {
            //from the debugging the code breaks from here when trying to get connectionstring.
                string constring = ConfigurationManager.AppSettings["localdb"].ToString();
                FluentConfiguration configuration = Fluently.Configure()
                    .Database(
                        MsSqlConfiguration.MsSql2005.ConnectionString(constring))
                    .Mappings(m =>
                    {
                        m.FluentMappings.AddFromAssemblyOf<myproject.model.Request>();
                        m.FluentMappings.AddFromAssemblyOf<myproject.model.Route>();
                    })
                    .ExposeConfiguration((x) =>
                    {
                        SaveConfigs = x;
                        x.SetProperty("current_session_context_class", "thread_static");

                    });
                _sessionFactory = configuration.BuildSessionFactory();
            }
        }
        catch (Exception ex)
        {
            Console.Write(ex.Message);

        }

    }


    public static void BuildSchema(ISession session)
    {
        var export = new SchemaExport(SaveConfigs);
        export.Execute(false,true,false,session.Connection,null);
    }

    class NestedSessionManager
    {
        internal static readonly SessionManager _sessionManager = new SessionManager();
    }
}

So from my comment the NullReferenceException happens when accessing the connectionstring. I don't have the explanation on why that happens.I'm sure it's some kind of gotchas, i can't get over it.I would be very grateful if anyone could give me a hand here.thanks for reading.

Upvotes: 0

Views: 314

Answers (2)

David R. Longnecker
David R. Longnecker

Reputation: 3157

ConfigurationManager.AppSettings["localdb"] from Test.aspx would be pulling from your web.config file on a web project.

That file wouldn't be accessible to your test project (I'm assuming your tests are in a separate project from your web site). You should be able to get around this by adding an app.config file into your test project with the correct localdb settings or rather than using a configuration string, use FluentNHibernate's fluent builder.

Example app.config file:

<?xml version="1.0"?>
<configuration>
 <appSettings>
   <add key="localdb" value="yourconnectionstring" />
 </appSettings>
</configuration>

Upvotes: 1

Dean Taylor
Dean Taylor

Reputation: 41981

If the value returned by ConfigurationManager.AppSettings["localdb"] is null then the .ToString() call will cause the NullReferenceException.

Ensure the "localdb" setting exists.

Upvotes: 0

Related Questions