如何测试接收ServerRequest
并返回Mono的处理程序方法
我可以通过
org创建
。并在ServerRequest
。springframework。嘲弄网状物反应性。作用服务器模拟服务器请求。builder()服务器响应上断言。statusCode()
。然而,我想测试这个ServerResponse
的主体,但是没有办法提取它。
ServerResponse response = target.search(MockServerRequest.builder()
.method(HttpMethod.GET)
.build()
).block();
assertThat(response.statusCode()).isEqualTo(HttpStatus.OK);
//assertThat(response.body()).isNotNull();
我不想用
WebTestClient
进行更广泛的测试,我想用单元测试测试所有可能的响应情况。
谢谢
我问了一个类似的问题,坚持不使用WebTestClient。在发现可以将响应转换为允许检查实体的类型后,我最终回答了自己的问题。
魔线(静态编程语言)是:
(serverResponse as EntityResponse<Fleet>).entity()
编辑:因此,对于预期的空体,您可以执行以下操作:
assert(serverResponse !is EntityResponse<*>)
感谢@andred指出这一点
我有完全相同的问题,因为我不想为每个测试启动整个Spring上下文。感谢自己回答中的信息,这对我有所帮助。这是一个完整的示例,包括Mockito和JUnit5:
import java.util.Arrays;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.http.MediaType;
import org.springframework.test.web.reactive.server.WebTestClient;
@ExtendWith(MockitoExtension.class)
class UsersHandlerTest {
@Mock
UserRepository userRepository;
WebTestClient client;
@BeforeEach
public void setUp() {
UsersHandler usersHandler = new UsersHandler(userRepository);
Router router = new Router(usersHandler);
Mockito.when(userRepository.findAll()).thenReturn(
Arrays.asList("", ""));
client = WebTestClient.bindToRouterFunction(router.getUsers()).build();
}
@Test
public void getCommands() {
client.get().uri("/users")
.accept(MediaType.APPLICATION_JSON_UTF8)
.exchange()
.expectStatus().isOk()
.expectBody().json("{}");
}
}
因此,最好的解决方案似乎是使用WebTestClient
。然而,这一个可以在没有运行服务器的情况下使用;
sping-test
模块包括一个WebTestClient
,可用于测试有或没有正在运行的服务器的WebFlux服务器endpoint。
-- https://docs.spring.io/spring/docs/5.0.0.BUILD-SNAPSHOT/spring-framework-reference/html/web-reactive.html#web-反应性试验
诀窍是使用bindTo。。()
builder方法。在我的例子中,bindToRouterFunction(新的MyRouter(新的MyHandler())
工作得很好
我试图让服务器发送的事件与Mozilla Firefox一起工作。给定一个Spring Boot的网络服务 使用Chrome浏览器或Edge(始终是最新版本)可以正常工作。我可以在网络分析器选项卡中看到未完成的请求,并且每秒都会显示一个新的时间戳。 然而,当我使用Firefox(84.0.2或更早版本)时,请求也会显示在网络选项卡中,但不会显示响应头或流数据。当我终止Spring后端时,Firef
像组件一样,服务通常需要依赖,Angular通过服务类的构造函数注入。由于我们在Angular的引导过程之外初始化这些类,我们必须自己显式注入这些依赖。这是通过使用TestBed配置测试模块传回所需的依赖项(如HTTP模块)来实现的。
Response响应对象主要将JSP容器处理后的结果传回到客户端。可以通过response变量设置HTTP的状态和向客户端发送数据,如Cookie、HTTP文件头信息等。 一个典型的响应看起来就像下面这样: HTTP/1.1 200 OK Content-Type: text/html Header2: ... ... HeaderN: ... (空行) <!doctype ...> <ht
正如前面的章节中讨论的那样,当一个 Web 服务器响应一个 HTTP 请求时,响应通常包括一个状态行、一些响应报头、一个空行和文档。一个典型的响应如下所示: HTTP/1.1 200 OK Content-Type: text/html Header2: ... ... HeaderN: ... (Blank Line) <!doctype ...> <html> <head>...</he
服务器响应 如需获得来自服务器的响应,请使用 XMLHttpRequest 对象的 responseText 或 responseXML 属性。 属性 描述 responseText 获得字符串形式的响应数据。 responseXML 获得 XML 形式的响应数据。 responseText 属性 如果来自服务器的响应并非 XML,请使用 responseText 属性。 responseText