2010-07-30 78 views
0

我有Web應用程序,有2套服務。一套是像UserService這樣的業務服務,另一套是像EmailService這樣的實用程序服務。業務服務如何連接到公用服務是通過NServiceBus。如何在這種情況下執行集成測試?我現在所做的是,我打破了2個單元測試的集成測試。首先是測試業務服務,然後模擬/驗證NServiceBus發送。第二次單元測試在公用事業服務上,然後模擬/驗證電子郵件發送。如你所知,這並不是最理想的。目前我們有兩個NServiceBus實例 - 一個作爲客戶端,另一個作爲服務器(服務器增加了處理程序)。這項工作正常,非測試模式(因爲客戶端是在IIS的環境下,服務器是一個獨立的應用程序),但當我嘗試在測試中這樣做,似乎我不能運行兩個實例?有什麼建議?你如何使用NServiceBus執行集成測試?

回答

2

這聽起來像你正在做單元測試正確,嘲笑NServiceBus上的外部依賴。清楚的是,我對單元測試的定義是,他們不會在代碼之外做任何事情(比如說使用MSMQ)。對於你的集成測試,你應該能夠以非常簡單的方式逃脫,證明你能夠將消息從一個系統傳遞到另一個系統,並且可能獲得預期的最終結果。要設置它,實際上可以從測試夾具的設置方法中啓動NServiceBus客戶機/服務器(並在拆卸過程中處理它們)。無論它們是EXE還是在IIS中運行都無關緊要 - 即使這意味着調用Process.Start()或類似的東西,也應該能夠以編程方式在測試中啓動/停止它們。或者,如果集成測試作爲持續集成設置的一部分在構建服務器上運行,則構建腳本可確保在啓動測試之前正確運行流程,這可能會導致更加可重複和更快速結果。使用TeamCity和MSBuild或NAnt的組合很容易做到這一點。

+0

嗯,我不同意他是「單元測試正確」。不要嘲笑你不擁有的東西。他需要模擬NServiceBus這一事實表明,他可能沒有正確地抽象出對公共汽車的依賴。換句話說,高層次的策略對象依賴於低層次的細節。他應該能夠單獨測試這些物體,也許可以使用間諜來代替公交車,以便再次單獨觀察物體的期望行爲。 (接下來) – fourpastmidnight 2016-02-19 14:56:03

+0

(續上)然後,正如他正確地觀察到的,他還應該進行集成測試,以測試所有參與者(包括總線)之間的交互是否按預期工作(例如,消息正在發送/如預期通過公共汽車由其各自的對象接收)。 – fourpastmidnight 2016-02-19 14:56:43

相關問題