如何检查项目是否未初始化?

时间:2018-10-23 14:41:26

标签: c# unit-testing initialization nullreferenceexception

我找不到任何可以解决此问题的地方。 我写了一个单元测试来测试这种方法

    public double CalculateTotalWeight()
    {
        double result = 0;
        if (Store?.TypeOfRacquet.Any())
        {
            result = Store.TypeOfRacquet.Sum(m => m.Weight);
        }
        return result;
    }

由于nullexceptionreference对象未在Weight属性上初始化,因此单元测试失败。 如何检查是否存在Weight属性,或者weight属性已初始化?

我尝试了很多方法

if (Store?.TypeOfRacquet.Any())
if (Store?.TypeOfRacquet.Where(m => m.Weight != null)
if (Store?.TypeOfRacquet.First().Weight != null)

编辑

这是我在TypeOfRacquet内的Weight属性

public int Weight
    {
        get { return Get<int>(); }
        set { Set(value); }
    }

我的单元测试

[TestMethod]
    public void CalculateTotalt_Without_Weight_Test()
    {
        var entity = new Store
        {
            TypeOfRacquet = new TypeOfRacquet
            {
                Id = Guid.NewGuid()
            }
        };

        var result = entity.CalculateTotalWeight();

        Assert.AreEqual(0, result);
    }

调试时,我得到System.NullReferenceException:对象引用未设置为对象的实例

2 个答案:

答案 0 :(得分:3)

最可能的问题是您的TypeOfRacquet为空。在尝试调用if方法之前,还应该在Any条件下检查该条件:

double result = 0;
if (Store?.TypeOfRacquet != null && Store.TypeOfRacquet.Any())
{
    result = Store.TypeOfRacquet.Sum(m => m.Weight);
}
return result;

或更简单地说:

return Store?.TypeOfRacquet?.Sum(m => m.Weight) ?? 0;

答案 1 :(得分:0)

感谢大家的帮助,这就是我所做的对我有用的

if (Store != null)
{
    foreach (var racquet in Store.TypeOfRacquet)
    {
        result += racquet.Weight;
    }
}