将请求重定向到 Side_Effect Utility 类
Re-direct requests to SideEffect Utility Classes
下面需要测试的spring启动应用程序是我的查询。
@CustomLog
@RestController
@RequestMapping("/my_path")
public class MyController {
@GetMapping(path = "**", produces = {MediaType.APPLICATION_JSON_VALUE})
public ResponseEntity<JsonNode> fetchData(HttpServletRequest request){
... some code.....which also calls external apis.....
}
@PostMapping(path = "**", produces = {MediaType.APPLICATION_JSON_VALUE})
@ResponseBody
public ResponseEntity<Map<String, Object>> createMOI(HttpServletRequest request){
... some code.....which also calls external apis.....
}
}
我的应用程序调用了一个外部服务,现在需要对其进行模拟。
this.webClient = WebClient.builder().baseUrl("http://localhost:9600/external_host_path")
.defaultHeader(HttpHeaders.CONTENT_TYPE,MediaType.APPLICATION_JSON_VALUE)
.build();
Mono<Pojo>responseMo = webClient.post().uri("/aGivenSubPath")
.accept(MediaType.APPLICATION_JSON).bodyValue(requestPoJo)
.retrieve().bodyToMono(Pojo.class).block();
我正在使用 MVC 调用我的控制器 API 作为 springtest
的一部分
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyControllerTest {
@Autowired
MyController controller;
@Before
public void setup() throws Exception {
this.mockMvc = standaloneSetup(this.controller).build();
}
@Test
public void testControl() throws Exception {
mockMvc
.perform(post("http://localhost:9600/my_path")
.contentType(MediaType.APPLICATION_JSON)
.content("{'someData':'[]'}"))
.andExpect(status().isAccepted())
.andReturn();
}
}
我正在寻找的是某种代理或副作用
http://localhost:9600/external_host_path
并将为此主机进行的所有调用重定向到自定义实用程序 class,该实用程序根据请求参数以编程方式向外部主机提供响应。
我见过 mockito、wireMock、mockwebserver、mockserver 等的多个示例
但是它们中的大多数都在给定的(静态路径)-当(调用静态路径)-然后(给出静态响应)上工作。
在整个流程中我有很多调用,我已经有了实用程序的逻辑 class 来为提供的请求参数生成响应。
虽然我找不到将网络服务器请求重定向到 sideEffect 的答案 class,
现在至少由 Mockito 的 MockBean 和 Answer 管理。
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyControllerTest {
@Autowired
MyController controller;
@MockBean
MyExternalServiceClient serviceClient;
@Autowired
MySideEffectService sideEffect;
@Before
public void setup() throws Exception {
this.mockMvc = standaloneSetup(this.controller).build();
Mockito.when(serviceClient.getMethod(any(),anyBoolean())).thenAnswer((Answer) invocation -> {
Object[] args = invocation.getArguments();
Object mock = invocation.getMock();
return sideEffect.getMethod((Map<String, List<String>>) args[0], (Boolean) args[1]);
});
}
@Test
public void testControl() throws Exception {
mockMvc
.perform(post("http://localhost:9600/my_path")
.contentType(MediaType.APPLICATION_JSON)
.content("{'someData':'[]'}"))
.andExpect(status().isAccepted())
.andReturn();
}
}
仍然会寻找一种方法(也许可以动态创建图像的 TestContainers 将使用我的 mockCode 创建一个服务器,这样我就可以使用这个主机名并替换为现有的真实主机名)
下面需要测试的spring启动应用程序是我的查询。
@CustomLog
@RestController
@RequestMapping("/my_path")
public class MyController {
@GetMapping(path = "**", produces = {MediaType.APPLICATION_JSON_VALUE})
public ResponseEntity<JsonNode> fetchData(HttpServletRequest request){
... some code.....which also calls external apis.....
}
@PostMapping(path = "**", produces = {MediaType.APPLICATION_JSON_VALUE})
@ResponseBody
public ResponseEntity<Map<String, Object>> createMOI(HttpServletRequest request){
... some code.....which also calls external apis.....
}
}
我的应用程序调用了一个外部服务,现在需要对其进行模拟。
this.webClient = WebClient.builder().baseUrl("http://localhost:9600/external_host_path")
.defaultHeader(HttpHeaders.CONTENT_TYPE,MediaType.APPLICATION_JSON_VALUE)
.build();
Mono<Pojo>responseMo = webClient.post().uri("/aGivenSubPath")
.accept(MediaType.APPLICATION_JSON).bodyValue(requestPoJo)
.retrieve().bodyToMono(Pojo.class).block();
我正在使用 MVC 调用我的控制器 API 作为 springtest
的一部分@RunWith(SpringRunner.class)
@SpringBootTest
public class MyControllerTest {
@Autowired
MyController controller;
@Before
public void setup() throws Exception {
this.mockMvc = standaloneSetup(this.controller).build();
}
@Test
public void testControl() throws Exception {
mockMvc
.perform(post("http://localhost:9600/my_path")
.contentType(MediaType.APPLICATION_JSON)
.content("{'someData':'[]'}"))
.andExpect(status().isAccepted())
.andReturn();
}
}
我正在寻找的是某种代理或副作用
http://localhost:9600/external_host_path
并将为此主机进行的所有调用重定向到自定义实用程序 class,该实用程序根据请求参数以编程方式向外部主机提供响应。
我见过 mockito、wireMock、mockwebserver、mockserver 等的多个示例 但是它们中的大多数都在给定的(静态路径)-当(调用静态路径)-然后(给出静态响应)上工作。 在整个流程中我有很多调用,我已经有了实用程序的逻辑 class 来为提供的请求参数生成响应。
虽然我找不到将网络服务器请求重定向到 sideEffect 的答案 class, 现在至少由 Mockito 的 MockBean 和 Answer 管理。
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyControllerTest {
@Autowired
MyController controller;
@MockBean
MyExternalServiceClient serviceClient;
@Autowired
MySideEffectService sideEffect;
@Before
public void setup() throws Exception {
this.mockMvc = standaloneSetup(this.controller).build();
Mockito.when(serviceClient.getMethod(any(),anyBoolean())).thenAnswer((Answer) invocation -> {
Object[] args = invocation.getArguments();
Object mock = invocation.getMock();
return sideEffect.getMethod((Map<String, List<String>>) args[0], (Boolean) args[1]);
});
}
@Test
public void testControl() throws Exception {
mockMvc
.perform(post("http://localhost:9600/my_path")
.contentType(MediaType.APPLICATION_JSON)
.content("{'someData':'[]'}"))
.andExpect(status().isAccepted())
.andReturn();
}
}
仍然会寻找一种方法(也许可以动态创建图像的 TestContainers 将使用我的 mockCode 创建一个服务器,这样我就可以使用这个主机名并替换为现有的真实主机名)