假設我們有一個CreditCardService微服務,它依賴於使用JSON進行通信的ThreeDSecureService微服務。微服務合同的自動化測試?
ThreeDSecureService的API(或甚至實施)的微小變化可能會悄悄地破壞CreditCardService(和其他潛在客戶端)。所以,我們希望自動化測試。
我看到兩個有缺陷的方法,並且想知道如何改進。
- 在ThreeDSecureService.Tests中進行集成測試。
隨附的ThreeDSecureService測試項目可以通過固定的JSON輸入進行集成測試。僞裝任何依賴關係,它可以運行一個完全的輸入調用,確認服務吞下輸入。
這裏的問題是,如果有人未能意識到他們的變化會如何破壞客戶端,他們幾乎可以「修復」測試來匹配他們的變化。
- CreditCardService.Tests中的集成測試。
客戶端是實際上想要測試有關ThreeDSecureService預期輸入的斷言的人。但是,這需要客戶端解決方案包含ThreeDSecureService項目以及它所依賴的任何項目。這會否定我們從使用微服務中獲得的許多優勢!
我們如何在不破壞我們從使用微服務中獲得的鬆散耦合的情況下從客戶端斷言(維護依賴關係)?
難道你不能簡單地讓你的集成測試項目瞭解它們嗎(通過引用或以某種方式啓動它們)?這兩個服務不需要彼此瞭解,但是我認爲在引用它們的測試項目中沒有任何傷害。 – kkirk
在此閱讀我的答案:https://stackoverflow.com/a/45177810/569662。 OP有關於如何管理服務依賴關係的類似問題。 –
@kkirk但是,當您在處理客戶端項目時,您需要運行常規測試。因此,您需要將集成測試項目包含在客戶端解決方案中,否?如果我們可以引用依賴關係的DLL *,那就好了......但是我們如何保持最新的,即最新的和構建的? – Timo