java - Spring:JUnit 测试休息控制器
问题描述
我正在尝试测试由 Angular 客户端调用的 RestController。我的 RestController 调用通过 SOAP 请求与 Web 服务进行通信的服务。你有什么例子可以学习来测试这种东西吗?这是我的BookController代码:
@RepositoryRestController
@RestController
@CrossOrigin(origins = "http://localhost:4200")
public class BookController {
@Autowired BookClient quoteClient;
GetBookListResponse lista = new GetBookListResponse();
BookService bookservice = new BookService();
@GetMapping(value = "/books")
public Object[] allBooks() {
lista = quoteClient.getBookList(true);
return lista.getBookList().toArray();
}
我想测试对BookClient类执行请求的allBook()函数。
public class BookClient extends WebServiceGatewaySupport {
public GetBookListResponse getBookList(boolean richiesta) {
GetBookListRequest request = new GetBookListRequest();
request.setRichiesta(true);
log.info("Getting all books: ");
try {
GetBookListResponse response = (GetBookListResponse) getWebServiceTemplate()
.marshalSendAndReceive("http://localhost:8080/ws/book", request,
new SoapActionCallback(
"http://spring.io/guides/gs-producing-web-service/GetBookListRequest"));
return response;
} catch (Exception ex) {
throw ex;}
}
在我的JUnit 测试类下面
@RunWith(MockitoJUnitRunner.class)
@WebMvcTest(value = BookController.class, excludeAutoConfiguration = {SecurityAutoConfiguration.class})
public class HttpRequestTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private BookController controller;
@MockBean
private BookClient client;
@Before
public void setup() {
mockMvc = MockMvcBuilders.standaloneSetup(this.controller).build();
}
@Test
@WithMockUser(username = "admin", password = "mypass", roles="ADMIN")
public void allBookShouldWork() throws Exception {
MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/books"))
.andExpect(MockMvcResultMatchers.status().isOk()).andDo(print()).andReturn();
assertThat(mvcResult.getResponse().getContentAsString()).isNotNull();
}
问题是响应的主体始终为空。
解决方案
BookClient
用@Profile("!test")
Extend BookClient
as (ex.)注释BookClientImpl
并用@Profile("test")
Add @ActiveProfile("test")
to注释它HttpRequestTest
这允许模拟肥皂客户端并实现“测试”模拟响应;
推荐阅读
- firebase - 函数/区域配置值在 Firebase 云函数中实际上做了什么?
- terraform - 向地形变量添加约束
- javascript - UnhandledPromiseRejectionWarning: SyntaxError: 无效的正则表达式: /\?(?
.*)/: 无效组 - hive - 数据插入问题
- r - R - 用其他列数据填充一列
- haskell - 在haskell中保证类型的值
- firebase - 如何将事务与 int 数据一起使用 - Firestore Flutter
- rest - GET 方法永远不会与基于安全 OAuth/OpenClient 的应用程序一起使用吗?
- r - 如何读取 .rdata 文件并从中写入 .csv 文件
- bash - sh:意外标记“<”附近的语法错误