EoR*_*013 2 c# testing null nunit
使用Nunit使用以下代码块测试C#代码:
foreach (XmlNode node in nodeList)
{
thisReport.Id = node.Attributes.GetNamedItem("id").Value;
thisReport.Name = node.Attributes.GetNamedItem("name").Value;
thisReport.Desc = node.Attributes.GetNamedItem("desc").Value;
if (node.SelectNodes("subreport").Count > 0)
{
thisReport.HasSubReport = true;
subReportNodeList = node.SelectNodes("subreport");
foreach(XmlNode subNode in subReportNodeList)
{
mySubReport.ParentID = node.Attributes.GetNamedItem("id").Value;
mySubReport.Priority = subNode.Attributes.GetNamedItem("priority").Value;
mySubReport.SubReportId = subNode.Attributes.GetNamedItem("id").Value;
mySubReport.SubReportName = subNode.Attributes.GetNamedItem("name").Value;
string sTime = subNode.Attributes.GetNamedItem("time").Value;
mySubReport.Time = Convert.ToInt16(sTime);
thisReport.SubReportsList.Add(mySubReport);
}
}
else
{
thisReport.HasSubReport = false;
}
reports.Add(thisReport);
}
Run Code Online (Sandbox Code Playgroud)
代码失败,并在行上使用空对象引用:
thisReport.SubreportsList.Add(mySubReport)
Run Code Online (Sandbox Code Playgroud)
但是查看本地,thisReport存在并且在块的顶部分配了值,并且mySubReport存在并且将值分配在它添加到thisReport的行的正上方.在所有值mySubReport都有效,并且SubReportsList在thisReport是类型的泛型列表SubReport.
那么,null在哪里?看起来很简单,它一定是我看不到的非常明显的东西.
在调用之前,您没有实例化SubReportsList Add.在添加之前执行以下操作mySubReport:
thisReport.SubReportsList = new List<SubReport>();
thisReport.SubReportsList.Add(mySubReport);
Run Code Online (Sandbox Code Playgroud)
您还可以更改SubReportsList属性以使您的生活更轻松:
public class Report
{
public IList<SubReport> SubReportsList
{
get
{
if (_subReportsList == null)
{
_subReportsList = new List<SubReport>();
}
return _subReportsList;
}
}
private IList<SubReport> _subReportsList;
}
Run Code Online (Sandbox Code Playgroud)
执行此操作将实例化List,如果它在null时被调用.
| 归档时间: |
|
| 查看次数: |
707 次 |
| 最近记录: |