- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
首先,我是 Java 堆栈的新手,为我辩护,我可能会问一些愚蠢的问题,谢谢您的耐心!
我需要什么:
集成测试,但没有发出外部请求。这意味着我必须在堆栈中比正常单元测试更深的地方模拟依赖项。我也不想加载上下文中的所有堆栈。
预期:
能够使用@BeanMock仅模拟客户端并通过测试。 (根据我的试验,这只是深度模拟了第一级)。
实际:
根据当前的设置,我得到了
创建名称为“com.example.demo.SomeControllerTest”的 bean 时出错:通过字段“webClient”表达的依赖关系不满足
如果我使用 @WebFluxTest(SomeController.class)
和 ContextConfiguration(...)
客户端最终将为 null。例如,如果我添加 @TestConfiguration
webflux 会提示某些注释与 @Configuration
发生冲突。
任何想法都将不胜感激!
@RestController
public class SomeController {
private final SomeService someService;
@Autowired
public SomeController(SomeService someService) {
this.someService = someService;
}
@GetMapping(value = "/endpoint")
public Mono<String> endpoint() {
return someService.get();
}
}
@Service
public class SomeService {
private final Client client;
@Autowired
public SomeService(Client client) {
this.client = client;
}
public Mono<String> get() {
return client.build().get().retrieve().bodyToMono(String.class);
}
}
@Component
public class Client {
private final HttpServletRequest request;
@Autowired
public Client(HttpServletRequest request) {
this.request = request;
}
public WebClient build() {
return WebClient.builder()
.baseUrl("https://httpstat.us/200")
.build();
}
}
@RunWith(SpringRunner.class)
@TestConfiguration
@SpringBootTest(classes = {
SomeController.class,
SomeService.class
})
@AutoConfigureWebTestClient
public class SomeControllerTest {
@Autowired
private WebTestClient webClient;
@MockBean
private Client client;
@Before
public void setUp() {
when(client.build())
.thenReturn(WebClient.create("https://httpstat.us/201"));
}
@Test
public void deepMocking() {
webClient.get()
.uri("/endpoint")
.exchange()
.expectStatus().isOk()
.expectBody(String.class).isEqualTo("201 Created");
}
}
最佳答案
@RunWith(SpringRunner.class)
@WebFluxTest(SomeController.class)
@ContextConfiguration(classes = {
SomeController.class,
SomeService.class
})
public class SomeControllerTest {
@Autowired
private WebTestClient webClient;
// ...
}
这是必需的组合,但我不明白为什么需要将 SomeController.class
添加到事件上下文,而 @WebFluxTest
不这样做那也是吗?
或
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {
SomeController.class,
SomeService.class,
})
// @AutoConfigureWebTestClient // does absolutely nothing?
public class SomeControllerTest {
@Autowired
private SomeController controller;
// ...
@Test
public void deepMocking() {
WebTestClient.bindToController(controller)
.build()
.get()
.uri("/endpoint")
.exchange()
.expectStatus().isOk()
.expectBody(String.class).isEqualTo("201 Created");
}
}
关于spring - WebTestClient 未注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50398616/
我正在尝试使用 WebTestClient 为 ExchangeFilterFunctions 编写单元测试,但是在更改并向 webTestClient 添加过滤器时遇到此错误。 java.lang.
我用 Spock 编写了集成测试。将 Spring 引导上下文配置为随机端口。文档声称 sprig 应该向我注入(inject)正确配置的 WebTestClient 实例,但是当我试图通过那些“自动
首先,我是 Java 堆栈的新手,为我辩护,我可能会问一些愚蠢的问题,谢谢您的耐心! 我需要什么: 集成测试,但没有发出外部请求。这意味着我必须在堆栈中比正常单元测试更深的地方模拟依赖项。我也不想加载
在我的 webflux 应用程序中,我有这个 GET 端点 v3/callback?state=cGF5bWVudGlkPTRiMmZlMG 我正在尝试使用 WebTestClient 编写集成测试
这个问题已经有答案了: how to log Spring 5 WebClient call (18 个回答) 已关闭5 年前。 我的 SpringBootTest 设置是这样的 @RunWith(S
我们正在使用 spring framework 5 和 spring boot 2.0.0.M6,我们还使用 WebClient 进行响应式(Reactive)编程。我们为我们的响应式(Reactiv
当我尝试在 Spring 4.x 进行测试时,我使用了 MockMvc Web 客户端, 但我正在阅读并尝试 Spring 5.x 的新功能。 我认为,WebTestClient 和 MockMvc
在 MockMvc 中,可以断言 jsonPath 包含 substing .andExpect(jsonPath("$.error.message") .value(containsString("
我想知道测试 SSE 的最佳方法是什么? 我想要测试的是我想检查我发送的消息(使用 Kafka)是否与我在 SSE 中收到的消息相同。 我读到可以使用 WebTestClient 来做到这一点,但我不
我在 Controller 中使用 Spring RequestContextHolder 并且它工作正常。但在单元测试中,我使用 WebTestClient 得到了 java.lang.Illega
Spring Boot 中是否有任何属性可用于配置 @Autowired WebTestClient?例如,如何在 WebTestClient 上设置 servlet 上下文路径(或者只是一些基本路径
我正在为我的 Controller 类编写单元测试。我正在使用 spring webflux。因此我正在使用 WebTestClient 编写测试。这是我的 Controller 方法 @PutMap
使用 REST API 和 Spring Boot WebTestClient,我可以轻松取回从返回的 JSON 解析的对象,如下所示: Person person = webTestClient
我在集成测试中使用 Spring WebFlux WebTestClient。我使用 WebTestClient.bindToServer() 创建客户端。经过测试的服务器使用 HTTPS 提供资源。
我正在使用 Spring Webflux 和 Kotlin 为新应用程序构建原型(prototype)。 Spring Webflux 包含一个用于单元测试的 WebTestClient。根据文档,我
在 Spring Boot 2.0.1 中使用 WebTestClient 时,根据绑定(bind)测试客户端的方式,我会得到不同格式的日期,请参阅下面的代码。 那么如何让 WebTestClient
我有一个返回列表的 API。 json 输出中的每个项目都是从 BaseItem 继承的子类。例如 class ItemA extends BaseItem{ Integer quantity;
我有这个“内容”响应,我需要从中断言一些值。 WebTestClient.BodyContentSpec content = response.expectStatus().isOk()
2.1 Release Notes 中的 SpringBoot 包含以下信息: Security configuration is now applied to WebTestClient. For
我有测试用例 @RunWith(SpringRunner.class) @SpringBootTest(webEnvironment = RANDOM_PORT) @AutoConfigureWebT
我是一名优秀的程序员,十分优秀!