有一个项目大约有20个控制器。每个控制器都有其相应的测试类。当我们尝试添加新的controller tests类时,以前运行良好的一些测试开始随机失败。如果使用@Ignore注释任何控制器测试类,测试将恢复正常。
这是失败测试抛出的异常:
org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常为java.lang.IllegalStateException:org.springframework.web.context.support.genericwebapplicationcontext@22f3fadf已经关闭。
::弹簧引导::(V2.0.3.发行版)
2019-07-04T13:01:50,325 INFO[pool-1-thread-17]O.S.B.StartupInfologger:在valhala上用PID 17817启动ZipCodeControllerTest(由/home/wblanck/projects/project中的wblanck启动)2019-04T13:01:50,325 DEBUG[pool-1-thread-17]O.S.B.StartupInfologger:用Spring Boot V2.0.3运行。发行版,Spring V5.0.7。发行版2019-07-04T13:01:50,325上下文层次结构根目录2019-07-04T13:01:50,448 INFO[pool-1-thread-17]O.S.B.F.A.AutoWireDanNotationBeanPostProcessor:找到并支持自动连接的JSR-330“javax.inject.inject”注释
2019-04T13:01:50,772信息[pool-1-thread-17]O.S.W.S.H.AbstractHandlerMethodMapping$MappingRegistry:映射“{[/error]}”到公共组织.SpringFramework.http.ResponseEntity com.package.Controller.WrongPatherRorController.BadPatherRor(javax.servlet.httpServletRequest)2019-07-04T13:01:50,772信息[pool-1-thread-17]O.S.W.S.H.
...其他HandlerMethodMappings...
测试很相似,基本上共同的结构是:
@RunWith(SpringRunner.class)
@WebMvcTest(Controller.class)
public class ControllerTest {
private static final String URL_TEMPLATE = ".....";
@Autowired
private MockMvc mvc;
@Autowired
private ObjectMapper mapper;
@MockBean
private Service service;
private CustomParams params;
private CustomRequest request;
@Before
public void init() {
// initialize params and request ...
}
@Test
public void methodOk() throws Exception {
when(service.method(refEq(params))).thenReturn(RESPONSE);
mvc.perform(MockMvcRequestBuilders.post(URL_TEMPLATE)
.contentType(MediaType.APPLICATION_JSON_UTF8)
.content(mapper.writeValueAsString(request)))
.andExpect(status().isOk())
.andExpect(jsonPath(STATUS_MESSAGE_PATH, is(MESSAGE_CODE_OK)))
.andExpect(jsonPath(STATUS_CODE_PATH, is(STATUS_OK.getStatusCode()))));
}
@Test
public void badRequest() throws Exception {
mvc.perform(MockMvcRequestBuilders.post(URL_TEMPLATE))
.andExpect(status().isBadRequest())
.andExpect(jsonPath(ERROR_MESSAGE_PATH).isNotEmpty());
}
控制器具有如下结构:
@RestController
public class Controller {
private Service service;
@PostMapping(value = "/api/some-url", produces = {"application/json"})
public ResponseEntity<CustomResponse> method(
@RequestHeader("someheaders") Integer someHeaders,
@RequestBody CustomRequest someBody) {
CustomParams params = new CustomParams();
params.setApplicationType(applicationType);
params.someHeaders(someHeaders);
return service.method(params);
}
出于保密的考虑,我已经更改了类和变量的名称。
您应该在测试中使用DirtiesContext注释。这将确保您在每个测试中都获得干净的上下文,并且它们不会相互干扰
我对@RestController和Spring Boot应用程序有问题 我对GET映射有问题 第一个endpoint@GetMap("/export")起作用,第二个不起作用;t起作用。在后一个endpoint中,无论我返回什么。在这里我测试了“Hello”,但它无论如何都不起作用。有趣的是,当我将第一个“导出”的路径更改为其他任何内容时,它也停止工作任何想法?
我想验证请求参数。我已经浏览了很多博客并回答了问题,我也做了同样的事情。在控制器类上添加了@Validated。 控制器中的方法: 控制器建议 配置: 完成所有这些之后,现在我得到一个404错误。"状态":404,"错误":"未找到","消息":"没有可用的消息"
环境:Mac OS X Lion, PHP 5.3.10, MySQL 5.X,TYPO3 4.7.1,Extbase 4.7.1,流体4.7.0 几天来,我一直在纠结extbase中的一个奇怪的验证错误。 Tx_Foo_Controller_FeUserController包含以下两个操作: 和 两项行动的内容: 登记册。html具有以下形式: createAction中只有一些“OK”文本。
我从两个方面建议了一些方法,一个是使用spring AOP支持,另一个是()建议所有带有注释的方法。在我的单元测试中,我试图通过破坏方法契约来强制抛出错误,但有时验证是到位的(上面提到的后处理器强加的建议),有时不起作用。有人经历过类似的事情吗。 下面是我正在尝试做的事情的一个小片段: 注释(可记录代码) 使用@Validated注释注释的接口(这里有相关信息的链接)。 实现此接口的基类:公共抽象
尝试用junit5和mockito测试我的web层(spring boot、spring mvc)。http方法的所有其他测试(get、put等)工作正常,但更新。遵循代码。 控制器: 服务: 最后,测试: 结果: CustomerService中的update(...)方法返回为null。无法理解方式。请建议。
我试图使用mockmvcbuilders.standalonesetup方法为一个spring mvc rest控制器创建一个非常基本的单元测试。我一直收到一个404错误。下面列出了测试应用程序上下文、测试类、控制器和整个堆栈跟踪。欢迎任何指导。 java.lang.AssertionError:状态应为:<200>但实际为:<404>在org.springframework.test.util.