在执行单元测试序列时,用户代码未对NullReferenceException进行处理

时间:2014-11-28 05:13:51

标签: string unit-testing nullreferenceexception

我很抱歉这是一个已在其他地方问过的问题的重复,但经过许多类似的问题,并没有看到完全符合我的情况的答案,我认为最好分享我的情况,并请求想法/帮助解决问题。

我有一个对象,它是域对象的开头,它还具有测试数据库持久性有效性的函数。代码如下:

public class DBObject
{
    public string AttributeA { get; set; }
    public string AttributeB { get; set; }
    public string AttributeC { get; set; }

    public bool IsValidForPersistence()
    {
        if (AttributeC.Equals(String.Empty) || AttributeC == null || AttributeB == null || AttributeB.Equals(String.Empty) || AttributeA == null || AttributeA.Equals(String.Empty))
            return false;
        else
            return true;
    }
}

如果我然后创建一个单元测试序列来设置这个对象,并测试IsValidForPersistence()方法中的if语句,那么除了AttributeC == null部分之外,我都会得到成功的测试。由于某种原因,测试崩溃并给我上面的NullReferenceException。 AttributeC应为null(我已故意将其设置为测试if条件正常工作)。当AttributeA和AttributeB以完全相同的方式设置为null时,它们都能正常工作。我已通过VS2013(Web)中的本地属性检查器确认DBObject不为空(并且它没有 - 它正确形成 - 只有AttributeC为null - 这与我期望看到的相匹配)。我已经尝试过清理和重建解决方案,这也没有解决问题。

我知道我可以通过使用一些基本的DDD方法来解决这个问题(例如创建一个强制用户代码填充AttributeC的构造函数,以确保它永远不会为null),但我更感兴趣的是知道我得到的错误是怎么回事,我能做些什么来确保它未来不会再发生。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在尝试在实例上调用方法之前,需要检查null。在这种特殊情况下,您可以像这样使用string.IsNullOrEmpty

return !(string.IsNullOrEmpty(AttributeA) || string.IsNullOrEmpty(AttributeB) || string.IsNullOrEmpty(AttributeC))