2014-03-26 29 views
0

這是我第一次在C#中編寫單元測試,我正在編寫一個單元測試到別人的代碼上。所以請在回覆中表現出色。在單元測試中,我調用跟蹤器類並將電壓變量ctp.Voltagel(它是公開的)設置爲1.當我運行一個測試時,變量顯示爲空。我不確定爲什麼變量的狀態不在1。任何想法爲什麼?這是我的代碼。在tracerCtrl的構造函數中,TracerParameters tp被聲明爲私有。所以我沒有從單元測試中獲得它。我需要將其設置在TracerParameters中。當在代碼中使用單元測試變量變爲空

[TestMethod] 
    public void TestGetScanResultVoc() 
    { 
     TracerCtrl tracerCtrl; 
     TracerParameters tp; 
     int channel = 0; 
     int dataSize = 500; 
     int []data; 
     data = new int[dataSize]; 
     int[] pyrn1Data = null; 
     int result = 0; 
     tracerCtrl = new TracerCtrl(); 
     tp = new tracerParameters(); 
     tp.Voltagel = 1; 


     tracerCtrl.processData(data, dataSize, channel); 
     } 

的tracerCtrl代碼

 public void processData(int[] data, int dataSize, int channel) 
    { 
     int i = 0; 
     if (channel == tp.Voltagel) //tp.Voltagel I get null 
     { 
      pyrn1Data = new int[dataSize]; 
      pyrn1DataSize = dataSize; 
      for (i = 0; i < dataSize; i++) 
      { 
       pyrn1Data[i] = data[i]; 
      } 
      bGotPyrn1 = true; 
     } 
    } 
+2

「traceParameters」類型的變量'tp'被傳遞到'tracerCtrl'中去了?你實例化它,但它永遠不會被傳入'processData'或你的'TracerCtrl'實例。 –

+0

@Aaron你能給我們一些關於'TracerCtrl'的更多信息嗎?正如'tp'引用什麼,'TracerParameters'存儲在對象中的位置? – FLGMwt

回答

1

tp in processData不能與TestGetScanResultVoc(它是一個局部變量,並且不會將其作爲參數傳遞)中的tp相同。

右擊tpprocessData,然後點擊「轉到聲明」查看變量實際來自哪裏。然後確保你設置了正確的變量。

+0

謝謝,我查了一下,編寫代碼的人在構造函數以外的函數中初始化了tp。需要弄清楚這是有意完成還是由於編碼不佳。 – Aaron

0

看來你實例tp但它從來沒有綁tracerCtrl。您可能需要做一些像

tracerCtrl.Parameters = tp; 

,或者如果你的TracerCtrl有一個構造函數,一個TracerParameters對象,

tp = new tracerParameters(); 
tp.Voltagel = 1; 
tracerCtrl = new TracerCtrl(tp); 

編輯:之前沒注意到這一點,但我很好奇其中tpTracerCtrl代碼中定義。我期望if聲明看起來更像:

if (channel == thisParameters.Voltagel) 

如果Parameters確實是TracerCtrl的參數的存儲位置。

如果您更新您的問題關於TracerCtrl的更多信息,我很樂意修改。