2012-08-08 60 views
0

當我運行一個單元測試時,我不斷收到空對象引用錯誤。使用NUnit進行單元測試。空對象錯誤

單元測試:

[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 
    } 
} 

的ErrorMessage:

˚F razerMann.CsvImporter.Entity.Test.EntityVerificationTests.EnumeratedData_ValidInputType_NoErrorAdded: System.NullReferenceException:未將對象引用設置爲對象的實例。

即時通訊im我忽略了一些愚蠢簡單的東西,但我無法看到它。如果有人能夠讓我擺脫我的痛苦,我很欣賞它。

回答

1

在你EnumeratedDataTypes方法中,首先設定inputs.EnumeratedDataTypes屬性的長度inputs.ColumnNames.Count,因爲它並沒有被填滿的數據尚未等於0(這僅僅是List容量已被設置爲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++) 
+0

@Andres you beat me to the answer。只是一個澄清,計數實際上是0,因爲該列表尚未被使用。 – JTMon 2012-08-08 14:41:19

+0

@JTMon你說得對,對不起!它當然是在構造函數中設置的'List' _capacity_,而不是預定義的_size_。將相應地更新我的回覆。 – 2012-08-08 14:50:16

+0

安德斯,歡呼聲回覆。關於<=和初始化的好處。不幸的是,它仍然說我有一個相同類型的錯誤。我用他更新的代碼編輯我的原始問題。 +1雖然:) – 2012-08-08 14:54:40

相關問題