@WebFluxTest
为了我的
@RestController
@PostMapping
部分。
这只是一个基本的设置
@rest控制器
,和
@Repository
在我的
@REST控制器
:
@RestController
@RequestMapping("/address")
@AllArgsConstructor
public class AddressController {
private final AddressRepository addressRepository;
@ResponseStatus(HttpStatus.CREATED)
@PostMapping(value = "/create")
public Flux<Address> create(@RequestBody Flux<Address> address) {
return address.flatMap(this.addressRepository::save);
}
}
在我的测试中:
@ExtendWith(SpringExtension.class)
@WebFluxTest(AddressController.class)
public class AddressControllerTest {
@Autowired
private WebTestClient webTestClient;
@MockBean
private AddressRepository addressRepository;
@Test
@DisplayName("Create")
public void create() {
Flux<Address> addresses = Flux.just("Hello").map(add ->
Address.builder().id("5bf907ff2e21d401d4054a4d").street(add).build());
Address add = Address.builder().id("5bf907ff2e21d401d4054a4d").street("Hello").build();
when(this.addressRepository.saveAll(addresses)).thenReturn(addresses);
this.webTestClient
.post()
.uri("/address/create")
.body(addresses, Address.class)
.exchange()
.expectStatus().isCreated()
.expectHeader().contentType(MediaType.APPLICATION_JSON_UTF8)
.expectBody(Address.class).isEqualTo(add);
}
}
还有一个非常简单的POJO:
@Data
@Builder
@Document
@AllArgsConstructor
@NoArgsConstructor
public class Address {
@Id
private String id;
private String street;
}
我希望能够创建端点以允许
0..*
地址。
mock
来电
create()
when(this.addressRepository.save(add)).thenReturn(addresses);
那么,这是一个
Mono
但如果我这么做的话
when(this.addressRepository.saveAll(addresses)).thenReturn(addresses);
那就不是了
mocking
创建()
编写这个单元测试的正确方法是什么?
谢谢!如果我没有提供足够的信息,请告诉我。
create
Postman
给我的
/address/create
尽管如此。