2014-05-18 77 views
2

怎麼會去單元測試這樣的方法?當它是一個虛空時它甚至有可能嗎?UnitTesting不返回方法c#

public static void CalcDeltaCO2() 
    { 
     double plantCO2usage = CalcPlantCO2Usage(); 
     double airShiftsPerHour = 1 + instance._greenhouse.WindowRoof.GetStatus(); 
     double co2AtStart = _simulatedChunks > 1 ? Toolbox.PPMtoM3perM3 (instance._currentCO2Sensor) : Toolbox.CO2_LEVEL_OUTSIDE; 
     instance._deltaCO2 = Toolbox.M3perM3toPPM ((((instance._greenhouse.CO2Dispenser.GetFlow()) - plantCO2usage 
     /(airShiftsPerHour * instance._greenhouse.Volume)) 
     * (1.0 - (1.0/Math.Pow (Math.E, (airShiftsPerHour * Toolbox.CHUNK_TIME_H)))) + (Toolbox.CO2_LEVEL_OUTSIDE - co2AtStart) 
     * (1.0/Math.Pow (Math.E, (airShiftsPerHour * Toolbox.CHUNK_TIME_H))) + co2AtStart) 
     - Toolbox.PPMtoM3perM3 (instance._currentCO2Sensor)); 
    } 
+2

「void」方法通常會影響應用程序的狀態(又名:變量在某處發生變化)。 在你的情況,你似乎正在改變'instance._deltaCO2'所以模擬/存根,並驗證對它的變化。 –

回答

2

單元測試可以驗證的三兩件事之一:

  1. 方法返回一個值
  2. 方法改變狀態
  3. 方法拋出一個異常

在你的情況,你的方法通過做一些計算來改變狀態。在這種情況下你可以做的是驗證instance._deltaCO2是否具有預期的價值。

+0

對於這個特定的測試。單元測試可以驗證的其他事情是通過進行調用來正確地影響(對象或應用程序的)行爲。 NUnit還可以驗證調用方法a)明確不會拋出任何異常,並且b)在指定的時間內返回。 – ClickRick