MockMvcFeignObjectWrapper.java
1.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package com.hotent.feign.mockmvc;
import com.hotent.feign.mockmvc.client.MockMvcClient;
import org.springframework.context.ApplicationContext;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
import feign.Client;
/**
*
*/
public class MockMvcFeignObjectWrapper {
private final ApplicationContext applicationContext;
private static MockMvc mockMvc;
private static MockMvcClient mockMvcClient;
public MockMvcFeignObjectWrapper(ApplicationContext applicationContext) {
this.applicationContext = applicationContext;
}
/**
* 如果当前的feignClient 不是MockMvcClient 转到MockMvcClient
*
* @param bean
* @return
*/
Object wrap(Object bean) {
if (bean instanceof Client && !(bean instanceof MockMvcClient)) {
return getMockMvcClient(applicationContext,(Client) bean);
}
return bean;
}
/**
* 构造MockMvc对象 单例 由于只有系统启动时 才会调用一次 不会存在并发 不需要考虑并发产生多个实例的问题
*
* @return
*/
private static MockMvc getMockMvc(ApplicationContext applicationContext) {
if (mockMvc == null) {
mockMvc = MockMvcBuilders.webAppContextSetup((WebApplicationContext) applicationContext).build();
}
return mockMvc;
}
/**
* 每个feign使用不同的MockMvcClient对象
*
* @param applicationContext
* @return
*/
public static MockMvcClient getMockMvcClient(ApplicationContext applicationContext,Client client) {
return new MockMvcClient(getMockMvc(applicationContext),client);
}
public static MockMvcClient getMockMvcClient(ApplicationContext applicationContext) {
return new MockMvcClient(getMockMvc(applicationContext));
}
public ApplicationContext getApplicationContext(){
return applicationContext;
}
}