ASP.NET项目的单元测试问题(运行测试时出现NullReferenceException)

时间:2010-05-25 14:46:31

标签: asp.net linq unit-testing testing nullreferenceexception

我正在尝试为我的n层Web应用程序创建一堆MS visual studio单元测试但由于某种原因我无法运行这些测试而且出现以下错误 -

  

“对象引用未设置为   对象的实例“

我正在尝试做的是测试我的数据访问层,我使用LINQ数据上下文类来执行某个函数并返回结果,但是在调试过程中我发现所有测试都会尽快失败他们到达LINQ数据上下文类,它与连接字符串有关,但我无法弄清楚问题是什么。

测试调试失败了(第二行):

public EICDataClassesDataContext() :
    base(global::System.Configuration.ConfigurationManager.ConnectionStrings["EICDatabaseConnectionString"].ConnectionString, mappingSource)
    {
        OnCreated();
    }

我的测试如下:

TestMethod()]
    public void OnGetCustomerIDTest()
    {
        FrontLineStaffDataAccess target = new FrontLineStaffDataAccess(); // TODO: Initialize to an appropriate value
        string regNo = "jonh"; // TODO: Initialize to an appropriate value
        int expected = 10; // TODO: Initialize to an appropriate value
        int actual;
        actual = target.OnGetCustomerID(regNo);
        Assert.AreEqual(expected, actual);
    }

我从DAL调用的方法是:

 public int OnGetCustomerID(string regNo)
    {
        using (LINQDataAccess.EICDataClassesDataContext dataContext = new LINQDataAccess.EICDataClassesDataContext())
        {
            IEnumerable<LINQDataAccess.GetCustomerIDResult> sProcCustomerIDResult = dataContext.GetCustomerID(regNo);
            int customerID = sProcCustomerIDResult.First().CustomerID;

            return customerID;
        }
    }

所以基本上一切都在到达DA层方法的第一行并且它试图实例化LINQ数据访问类时失败...

我花了大约10个小时试图解决问题,但没有结果......我真的很感激任何帮助!

更新 最后我修复了这个!!!! :)我不知道为什么但是由于某些原因在app.config文件中与我的数据库的连接如下:

  

AttachDbFilename = | DataDirectory目录| \ EICDatabase.MDF

所以我做的就是改变路径而不是| DataDirectory |我把实际路径放在我的MDF文件所在的位置,即

  

C:\ Users \ 1 \ Documents \ Visual Studio 2008 \ Projects \ EICWebSystem \ EICWebSystem \ App_Data \ EICDatabase.mdf

我做完之后就解决了!但是仍然有点不清楚是什么问题...可能是错误的数据库路径?我的ASP.NET项目的web.config包含| DataDirectory | \ EICDatabase。 MDF路径虽然..

3 个答案:

答案 0 :(得分:2)

LINQDataAccess.EICDataClassesDataContext是否正在寻找web.config或其他一些外部数据源进行设置?

我可以告诉你一个事实,你必须通过箍来让web.config访问你的测试代码。

更新的 没错。我看到您在测试失败的行上使用ConfigurationManager ... ConfigurationManager查找web.config以进行配置。当我写测试时,这对我来说是一个棘手的问题。

您需要更改代码,以便可以在没有web.config的情况下实例化类,或者您需要进行实验以使测试可以访问web.config。

答案 1 :(得分:2)

您的测试项目是否拥有自己的配置文件?这种行为通常意味着应用程序无法找到连接字符串。测试项目需要自己的文件,因为它们没有在客户端应用程序的上下文中运行。

更新在测试基于SQLExpress构建的Web应用程序并附加.mdf时,添加app.config后所描述的错误很常见。 SQLExpress一次不能在多个进程中运行。因此,如果您之前运行过您的Web应用程序,它可能仍处于活动状态,并且会与附加数据库的尝试发生冲突。

您可以使用SQL Management Studio永久附加数据库,然后使用更传统的连接字符串,如:

Server=myServer;Database=EICDatabase;Trusted_Connection=True;

答案 2 :(得分:0)

对我来说,似乎您的问题是连接字符串,未设置。 我假设您的单元测试与DAL不同。 在没有连接字符串的情况下,在datacontext构造函数上调用'new'命令。所以它通常应该在设置时使用它的默认值。但由于此设置通常存储在另一个项目的web.config中,因此没有设置连接字符串,您将收到错误。

如果它正确,我认为,你必须从DAL项目获得设置到单元测试项目。最简单的解决方案应该是将web.config连接字符串复制到单元测试项目的app.config。

还有其他可能性,但我认为将web.config配置放入单元测试项目并不容易。