0

当我运行我的一个单元测试时,我不断收到一个空对象引用错误。

单元测试:

    [Test]
    public void EnumeratedData_ValidInputType_NoErrorAdded()
    {
        List<String> errorMessageList = new List<string>();
        UserInputEntity myEntity = new UserInputEntity();

        myEntity.DataTypes = new List<string>();
        myEntity.DataTypes.Add("DateTime");
        myEntity.DataTypes.Add("datetime");
        myEntity.DataTypes.Add("decimal");
        myEntity.DataTypes.Add("decIMAL");
        myEntity.DataTypes.Add("DOUble");
        myEntity.DataTypes.Add("double");
        myEntity.DataTypes.Add("FLOat");
        myEntity.DataTypes.Add("float");
        myEntity.DataTypes.Add("INT");
        myEntity.DataTypes.Add("int");

        PathReader reader = new PathReader();
        IOManager manager = new IOManager(reader);
        VerificationManager testObject = new VerificationManager(manager);

        testObject.EnumeratedDataTypes(myEntity, errorMessageList);
        Assert.AreEqual(errorMessageList.Count, 0);
    }

方法代码:

    public void EnumeratedDataTypes(UserInputEntity inputs, List<String> errorMessageList)
    {
        inputs.EnumeratedDataTypes = new int[inputs.DataTypes.Count];
        try
        {
            for (int i = 0; i < inputs.DataTypes.Count; i++)
            {
                inputs.EnumeratedDataTypes[i] = (int)Enum.Parse(typeof(Enumerations.ColumnDataTypes), inputs.DataTypes[i].ToUpper());
            }
        }
        catch (Exception ex)
        {
            errorMessageList.Add(ex.Message);
        }
    }

枚举:

class Enumerations
{
    public enum ColumnDataTypes
    {
        DATETIME = 0,
        DECIMAL = 1,
        DOUBLE = 2,
        FLOAT = 3,
        INT = 4
    }
}

错误信息:

FrazerMann.CsvImporter.Entity.Test.EntityVerificationTests.EnumeratedData_ValidInputType_NoErrorAdded:System.NullReferenceException:对象引用未设置为对象的实例。

我假设我忽略了一些愚蠢简单的东西,但我看不到它。如果有人能让我摆脱痛苦,我将不胜感激。

4

1 回答 1

1

在您的EnumeratedDataTypes方法中,您首先将inputs.EnumeratedDataTypes属性的长度设置为,因为它尚未填充数据(它只是已设置为的容量inputs.ColumnNames.Count),因此等于。0List 9

0接下来,当用您循环到索引(包括)的数据填充此数组属性时inputs.DataTypes.Count

for (int i = 0; i <= inputs.DataTypes.Count; i++)

我将input.DataTypes列表的大小计算为10. 因此,您将尝试将数据写入空数组。

我建议进行以下更改:

首先,初始化inputs.EnumeratedDataTypes数组如下:

inputs.EnumeratedDataTypes = new int[inputs.DataTypes.Count];

其次,在循环使用<而不是<=for

for (int i = 0; i < inputs.DataTypes.Count; i++)
于 2012-08-08T14:37:08.990 回答