我使用spring cloud的尤里卡和假裝來進行一些服務之間的通信(可以說A和B)。現在,我想單元測試一個服務的服務層(A)。問題是,這個服務(A)使用假裝客戶端來請求其他服務的一些信息(B)。模擬一個Eureka Feign客戶端進行單元測試
運行單元測試沒有任何特殊的配置會拋出以下異常:java.lang.RuntimeException: com.netflix.client.ClientException: Load balancer does not have available server for client: service-b
=>,但我不希望任何服務器來運行。
我的問題是:是否有辦法來嘲笑佯客戶端,這樣我就可以不運行尤里卡實例和服務(B)單元測試我的服務(A)?
編輯: 我結束了創建了佯客戶存根。該存根被標記爲主要組件,以強制spring在我的測試中實例化存根。
這是我想出的解決方案。
//the feign client
@FeignClient("user")
public interface UserClient {
UserEntity getUser();
}
//the implementation i use for the tests
@Component
@Primary //mark as primary implementation
public class UserClientTestImpl implements UserClient {
@Override public UserEntity getUser() {
return someKindOfUser;
}
}
這是我想出了迄今爲止的解決方案: 的佯接口 '@FeignClient( 「用戶」) 公共接口UserClient { //一些佯註釋 UserEntity的getUser(); }' 我使用的測試 '@Component @Primary 公共類UserClientTestImpl實現UserClient { @覆蓋 公共UserEntity的getUser(){ 回報someKindOfUser的實施; } }' 基本上它的方法你提到@Markon。 –
你可能會在你的問題中發佈代碼?在評論中很難閱讀代碼:D我很高興它有幫助。當你想測試行爲時,你可以使用模擬。如果你想測試「連接」,請設置一個小型網絡服務器! :P – Markon