单元测试抛出NullReferenceException

时间:2015-10-17 16:51:37

标签: c# xml unit-testing nunit

我一直在尝试对从xml文件加载数据并将其作为列表返回的方法运行测试,但是,当它运行时我不断收到NullReferenceException。我已经检查过了,我的文件路径很好。

[TestCase(1)]
public void firstTest(int num)
{
    var studentList = StudentListGenerator.CreateStudentList(@"../../TestReport/TestData.xml");

    Assert.IsTrue(studentList.Count() > num);
}

堆栈跟踪指向我的CreateStudentList方法中的一行代码,如果我将其直接插入到测试本身中就可以正常工作(当我正常运行时,整个方法运行良好)。

String xData = File.ReadAllText(filePath);
var x = new XmlSerializer(typeof (Report));
Report dataConverted = (Report) x.Deserialize(new StringReader(xData)); 
// the last line is where the stack trace ends

任何人都猜到我哪里出错了?

编辑: 以下是一些StudentListGenerator类的链接,其中包含CreateStudentList方法:https://gist.github.com/jekrch/eecdd1c8de8a11268be0

这是完整的堆栈跟踪:

  

在PFdata.Dashboard.Data.StudentListGenerator.CreateStudentList(String   filePath)in   C:\用户\ CodeCamp \桌面\ StudentDataDashboard \ StudentDataDashboard \ Dashboard.Data \ StudentListGenerator.cs:行   41在DashboardTests.StudentDataCalcTests.firstTest(Int32 num)中   C:\用户\ CodeCamp \桌面\ StudentDataDashboard \ DashboardTests \ StudentDataCalcTests.cs:行   22结果消息:System.NullReferenceException:对象引用   没有设置为对象的实例。

1 个答案:

答案 0 :(得分:0)

因此原始错误的堆栈跟踪具有误导性。我正在测试的CreateStudentList方法中NullReferenceException的真正来源是以下行:

Application.Current.Properties["reportMonth"] = reportMonth;

问题是Application类没有被测试实例化。因此,解决方案是在测试开始时简单地实例化应用程序,如此,

var app = new Application();

我想到了comment by Ben Raupov关于类似问题的问题。非常感谢Unicorn2帮助我分解了许多其他可能性。