单元测试 - 空参考Exc

时间:2016-12-29 12:54:44

标签: c# class unit-testing

当我尝试测试我的课时,我得到NullReferenceException,我不明白为什么? Exeption连接到: o1.Products.Add 。 当我尝试删除它时,一切都很好。

public class Product
{
    public string Name { get; set; }
    public decimal Value { get; set; }
}

public class Order
{
    public List<Product> Products { get; set; }

    private decimal value { get; set; }
    public decimal Value
    {
        get { return value; }
        set
        {
            if (Products.Count == 0)
                value = 0;
            else
                value = Products.Sum(x => Convert.ToInt32(x));
        }
    }
}

[TestClass]
public class Tests
{
    [TestMethod]
    public void OrderTest()
    {
        //Arrange
        Product p1 = new Product();
        Order o1 = new Order();
        //Act
        p1.Value = 10;
        o1.Products.Add(p1);
        //Assert
        Assert.AreEqual(30, o1.Value);
    }
}

1 个答案:

答案 0 :(得分:0)

这是因为Products从未实例化,因此它是null - 您正在调用null.Add(p1),这是一个空引用

要修复它,您可以创建一个Order构造函数并在那里实例化Products

public class Order
{
    public List<Product> Products { get; set; }

    public Order() {
        this.Products = new List<Product>();
    }
}