0

単体テストの 1 つを実行しているときに、null オブジェクト参照エラーが発生し続けます。

単体テスト:

    [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.EnumeratedDataTypesinputs.ColumnNames.Count0List 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 に答える