提问人:Steven Kristian 提问时间:11/15/2023 最后编辑:Steven Kristian 更新时间:11/15/2023 访问量:20
从 JpaRepository 获取数据时,未从 WebTestClient 接收到任何数据
No data received from WebTestClient when getting data from JpaRepository
问:
我有一个简单的集成测试用例,我想在其中查找某个数据。 首先,我使用 .save() 插入数据。虽然它工作成功(因为我调试了它,并且 this.dataRepository.findAll() 不返回 null),但是当我使用 WebTestClient 使用相同的方法(this.dataRepository.findAll())获取特定数据时,它返回 null
@RequestMapping(value = "/api/constant")
public class ConfigurationController {
@Autowired
private DataRepository dataRepository;
@GetMapping
public Mono<Object> getConstant() {
Mono.fromSupplier(() -> this.dataRepository.findAll()).subscribeOn(Schedulers.single());
}
}
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK)
@AutoConfigureWebTestClient
@Transactional
public class TestITCase {
@Autowired
private DataRepository dataRepository;
@Autowired
private WebTestClient webTestClient;
@Test
public void getConstants_Valid_Success() {
this.dataRepository.saveAndFlush(data);
this.dataRepository.findAll(); // the data exist
FluxExchangeResult<String> result = this.webTestClient.get()
.uri(b -> b.path("/api/constant")
.build())
.header(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE)
.exchange()
.returnResult(String.class)
.getResponseBody()
.blockFirst(); // this returns null for some reason
}
}
更新
显然,在使用 WebTestClient 时,
此请求在不同的线程中处理,因此使用新事务。存储库插入在SpringBootTest和WebTestClient中不起作用
但是现在我想知道有没有办法让 WebTestClient 在同一线程上运行?因为我不想提交事务然后回滚它,因为它不会在我的测试中创建幂等性(例如,测试在 .delete() 之前失败),所以数据被意外保存。
答: 暂无答案
评论