2014-02-26 68 views
4

運行NUnit的測試中,我有一個問題。在釋放模式

#if DEBUG 
     ca.ConveyancingAttorneyID = "C0B68DC3-C396-4264-880B-1A699C53A8CE"; 
     ca.ConveyancingFirmID = "C0B68DC3-C396-4264-880B-1A699C53A8CE"; 
#endif 

當我們在調試模式下運行時,我們對標識符進行硬編碼。在發佈中,它顯然是動態設置的。現在

,當涉及到單元測試映射代碼,我不得不這樣做:(initally我只是測試的「釋放的情況下」,這將隨後alwasy在調試模式下失敗)

#if RELEASE 
     Guid id = new Guid("1A92CE5A-D956-486B-9B65-0A3630EF0285"); 
#endif 
#if DEBUG 
     Guid id = new Guid("C0B68DC3-C396-4264-880B-1A699C53A8CE"); 
#endif 

這並不理想。而且必須記住(並且提醒隊友)始終在版本中運行單元測試也是一件麻煩事。我們沒有持續集成設置,所以測試只能在本地運行。

有沒有辦法迫使NUnit的/ Visual Studio中的TestRunner/ReSharper的的TestRunner始終運行在發行模式下的測試?或者有更好的方法來解決這個問題,請記住這些'#if DEBUG'代碼塊在解決方案中非常豐富。

+1

'我們沒有一個持續集成設置,所以測試是隻有永遠在本地運行。「 - 這似乎是潛在的問題。 –

+4

請跟我說說。在我加入之前,沒有進行單元測試。 –

+0

@JohanVenter'#if DEBUG''Assert.Fail(「...」)''endif'? – BrainSlugs83

回答

1

我不知道我們足夠了解你的項目以適當的方式來回答這個結構。它基本上取決於你在哪裏以及如何使用這些值。

理想情況下,你應該通過接口獲取從某處這些ID。這會讓你僞裝並切換該接口後面的實現,從而允許您在需要時返回硬編碼的虛擬值來測試使用這些值的邏輯。

你可以建立一個配置選項允許你指定是否使用真正的實現,或虛擬數據提供商允許無需重新編譯開關。

更新:由於上述是不是一個真正的偉大的回答你的具體問題,這裏的另一個嘗試:在Resharper > Options > Tools > Unit Testing,存在從一個選項運行測試:,在那裏你可以指定一個文件夾,而不是使用默認項目輸出文件夾。

這可能是一個很長的一段時間,但是也許你可以配置VS將你的項目的發佈版本構建到某個特定的文件夾,並參考測試,即使主項目構建配置設置爲Debug?

+0

是的,對接口進行編碼並且可能使用類似Unity的東西對於替換「假」實現是非常好的。不幸的是,這將是一個相當麻煩的介紹到這個項目。 也許我會嘗試像你說的內置的dll發送到一個文件夾。從可維護性的角度來看,可能本身就是一種痛苦?不知道如何保持引用同步? –

+0

標記爲答案,給出了多個選項。可能只是抽象一個配置設置,我可以在單元測試時強制「釋放」。謝謝 –

3

如果你必須運行版本,使用參數/配置:釋放

0

記住大小寫使用參數時例如事項/配置:從至強的答案版本,否則你會得到一個誤導性的錯誤:

Invalid : Path_to_your_file 
File type is not supported error 

(沒有足夠的口碑評論)