单元测试抛出NullReferenceException

本文关键字:NullReferenceException 单元测试 | 更新日期: 2023-09-27 18:18:04

我一直在尝试对从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(字符串filePath)C:'Users'CodeCamp'Desktop' StudentDataDashboard ' StudentDataDashboard ' Dashboard.Data ' StudentListGenerator.cs:行在DashboardTests.StudentDataCalcTests。firstTest(Int32 num) inC:'Users'CodeCamp'Desktop' StudentDataDashboard ' DashboardTests ' StudentDataCalcTests.cs:行22 Result Result: System.输出说明NullReferenceException:对象引用未设置为对象的实例。

单元测试抛出NullReferenceException

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

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

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

var app = new Application();

我从Ben Raupov关于类似问题的评论中得到了这个想法。非常感谢独角兽2帮助我提出了许多其他的可能性。