我正在開發一個有很多外部服務消息的項目。僅以一種稍微「雙曲線」的方式來描述它的一種好方法是系統必須將消息發送到Flicker API,Facebook API和Netflix API的應用程序。在測試之外使用模擬對象,不好的做法?
爲了支持斷開連接的場景,日誌問題,開發人員可用性,配置等......我已經嘗試過使用大量使用泛型和表達式樹的方法。最終的結果是這樣的:
Messenger<NetflixApi>.SendCustom(netflix => netflix.RecommendMovie("my message"));
總的來說,我很高興與最終結果,但覺得我犯了一個錯誤,或者忽視與問候測試和斷開場景設計主要某處。
在測試過程中,無論是基於自動化,單元還是人爲的,我已經實現了一個對象工廠,最初使用DI在「實時模式」下執行正確的操作,並使用Mocks提供一種無菌信使,在測試模式下,什麼都做不了。
我只看到或讀過關於純粹TDD模式下使用的Mocks,而不是被用於某種愚蠢的對象。我所看到的方法將圍繞存根或嘲諷所使用的所有API所依賴的HTTP通信功能。
我主要關心的是,我希望連接到的所有不同的服務,我最終將不得不做大量細粒度的工作來取代特定的HTTP實現,如果我使用存根方法,我會有3個類用於這些服務(IService,ConcreteService,StubService)以及在實現新方法或更改任何內容時維護這些服務都是真正的PITA。
在目前的實現中,我使用Mocks來免費獲得「無菌模式」,幾乎不必爲了符合某個測試委託人而實施任何額外的任務。
問題是我錯過了什麼?我以更方便的方式違反了使用Mocks的設計負責人嗎?
任何人都可以提供任何建議,如何從許多不同的外部服務中獲得無菌模式,而無需跳過很多環節嗎?
這個問題有意義嗎?
感謝您的所有答案。
編輯#1:
我原來的問題並不清楚。任何null或mock對象都將純粹用於開發/調試/測試環境。在生產中,發送這些消息的代碼將是它們的實際實現。
我投票給每個人,因爲似乎有很多不同的解決方案來解決這個問題,我會探索每一個。
請不要認爲這個問題已經得到解答,我會盡我所能的讚賞。
第二次我看到這個線程的主題有一個紅色的「空對象」警報繼續... – abyx 2008-12-15 09:17:35