问题标签 [spring-mvc-test]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
19010 浏览

java - 在单元测试控制器时模拟 Spring Validator

在为另一个项目创建的代码编写单元测试事后分析时,我遇到了如何模拟绑定到控制器的验证器的问题initBinder

通常我只会考虑确保我的输入是有效的,并通过在验证器中进行一些额外的调用来完成,但在这种情况下,验证器类与通过一些数据源进行检查相结合,这一切都变得非常难以测试。耦合可以追溯到一些旧的常用库,并且超出了我目前修复所有这些库的工作范围。

起初我尝试使用 PowerMock 和模拟静态方法来模拟验证器的外部依赖项,但最终在创建类时遇到了一个需要数据源的类,但没有找到解决方法。

然后我尝试只使用普通的 mockito 工具来模拟验证器,但这也不起作用。然后尝试在mockMvc调用中设置验证器,但这仅注册@Mock验证器的注释。终于碰到了这个问题validator但是由于控制器本身没有字段,所以这也失败了。那么,我该如何解决这个问题呢?

验证器:

控制器:

测试类:

例外:

0 投票
0 回答
1594 浏览

java - 使用自定义返回值处理程序进行 MockMVC 异步测试

我正在尝试使用 MockMvc 以异步结果测试我的 Spring 4.1 控制器。我遵循了与此处描述的相同模式:

https://github.com/spring-projects/spring-mvc-showcase/blob/master/src/test/java/org/springframework/samples/mvc/async/DeferredResultControllerTests.java

但是,我的测试有所不同,因为我使用的是此处描述的返回值处理程序:

https://github.com/AndreasKl/spring-boot-mvc-completablefuture

这是我的测试代码的样子:

似乎即使我使用 StandaloneMockMvcBuilder.setCustomReturnValueHandlers() 设置返回值处理程序,它也不会被调用。这会导致 request().asyncStarted() 的断言失败,因为结果不是 Callable 或 DeferredResult。

我是否正确设置了处理程序,还是缺少其他东西?

==== 解决方案 ======

在阅读文档并逐步使用调试器后,我发现 setCustomReturnValueHandlers() 将处理程序添加到列表的末尾,而 spring-boot-mvc-completablefuture 示例将其插入到 DeferredResult 处理程序之前。使用非独立模式将允许这样做。

0 投票
0 回答
788 浏览

spring-mvc - 使用 RequestPostProcessor 与注释的 Spring MVC 测试

我有一个使用 JHipster 创建的应用程序。我生成了一个博客实体,然后修改了BlogResource类,使其getAll()方法只返回当前用户的博客。

BlogRepositoryfindAllForCurrentUser()方法如下。

为了测试这一点,我可以使用 Spring Security 的RequestPostProcessor

我很想知道为什么使用这样的注释@WithMockUser并且@WithUserDetails不会为此工作。如果我将其更改为使用注释,则会收到以下错误:

0 投票
1 回答
289 浏览

java - Spring Junit4TestRunner Autowired null



应用程序上下文

Junit 测试

测试上下文

如果我运行上面的 Junittestcase,autowire 为空。

如果我执行 main 方法并使用 ClassPathXmlApplicationContext,bean 正在加载并且 autowire 不为空。

0 投票
2 回答
3422 浏览

spring-mvc - Spring MVC 在集成测试中混合 xml 和 java @ContextConfiguration

我正在尝试使用 XML 配置和带@Configuration注释的类的组合来配置 Spring MVC 集成测试。

java配置已正确初始化。问题是尽管"**/security-config.xml"在初始化期间找到并解析了该文件......其中定义的所有 Spring 安全 bean 从未在WebApplicationContext.

所以我的问题是如何在 Spring MVC 集成测试中同时使用基于 XML 和基于注释的配置?

我可以将 spring 安全配置更改为基于 java/annotated 的配置...我宁愿不这样做。我发现使用 spring 安全命名空间比使用 java 配置更具可读性和简洁性。

另外,请注意这种组合的 XML/Java 配置在非测试环境中工作得非常好。

  • 春天 v4.1.6
  • Spring Security v4.0.1

WebApplicationContext 配置:

RootConfig.class

安全配置.xml

0 投票
1 回答
690 浏览

spring-security - Spring security DefaultMethodSecurityExpressionHandler bean 未注册 Integration Test 的默认 spring security 配置

我正在尝试使用 Spring Security 和 Thymeleaf 为视图层编写 Spring MVC 集成测试。

就像文档中的所有示例一样,我已经使用 Spring Security Integration 设置了我的 MockMvc 对象。

集成测试设置:

Thymeleaf 配置为使用 SpringSecurityDialect。(thymeleaf-extras-springsecurity4)

为了能够在视图层中使用 spring 安全表达式(示例)。

现在我的配置在测试之外工作得非常好,但是,当我尝试进行集成测试时,Thymeleaf 抛出一个异常,指出

(org.thymeleaf.extras.springsecurity4.auth.AuthUtils.class)

此异常是有效的,因为在集成测试期间应用程序上下文中缺少 SecurityExpressionHandler.class。

所以我的问题是......为什么 SecurityExpressionHandler.class 在常规 servlet 环境中注册为 spring bean,但是在使用集成测试配置时,上下文中缺少 ctx.getBeansOfType(SecurityExpressionHandler.class)?这是 Spring Security 中的错误吗?或者我是否需要添加额外的逻辑来为集成测试注册一个 SecurityExpressionHandler bean?

我尝试通过扩展 GlobalMethodSecurityConfiguration 和 @Overriding createExpressionHandler() 并将其添加到我的测试配置来“强制创建”一个 SecurityExpressionHandler,但该 bean 仍然没有在 WebApplicationContext 中注册。

这对我来说现在是一个障碍,因为我无法对包含嵌入其中的 Spring Security 表达式的任何视图文件执行任何集成测试。

0 投票
3 回答
544 浏览

spring - Spring MVC 4 中的控制器配置无效

我是 Spring 框架的新手。我想开发一个简单的 web 应用程序,它显示基于 url“/greeting.html”的 hello.jsp 内容。但现在,它给了我 404 错误。我究竟做错了什么?

这是我的项目的 github repo(这个项目是在 Eclipse STS 下创建的):https ://github.com/terancet/EventTracker

这是我的 HelloController 类

这是 web.xml

这是一个项目结构:

项目结构

0 投票
1 回答
1014 浏览

spring-test - I would like to test the resolved view name for a spring controller

Simplist case my controller returns new ModelAndView("hello"). "hello" maps/resolves to (in an xml file) to a jsp, e.g. "hello" may map to WEB-INF/myapp/goodbye.jsp. I would like to write a test for my controller to verify the view name being returned will properly resolve to something. In the event that somewhere, either in the controller or the (I am using tiles to map) spring config that defines the mapping that the view name has not been fat fingered.

0 投票
1 回答
210 浏览

spring-security - 具有安全性和会话的 Spring MVC 测试

我正在使用基于弹簧安全表单的登录机制,成功登录后,我将一个对象存储在会话中。使用存储在会话中的该对象来决定下一个请求的命运。但是现在当我使用带有安全支持的 spring mvc 测试进行测试时。我无法在成功验证后填充该会话对象。我尝试为会话提供登录时填充的对象,但我猜 Spring Security 清除了该会话。

那么如何在spring mvc测试中成功登录后将该对象设置为会话。

0 投票
3 回答
7806 浏览

spring-mvc - Spring MockMvc 和异步控制器的 HTTP 状态码

当我的控制器具有异步 servlet 特性时,如何验证/测试 MockMvc 中的 500 内部服务器错误?

我正在为我的 REST 端点编写单元测试用例,作为测试用例的一部分,我需要验证服务器是否将 500 内部错误作为 http 代码发送并带有适当的错误消息。

这是我基于 Spring Boot 的应用程序:(为了更好的可读性,所有导入都被省略了)

这是我的 MovkMvc JUnit 测试用例:

下面是控制台打印:

从上面的日志中可以明显看出,MockMvc 将 http 状态代码返回为 200 而不是 500。错误消息很好。

当我使用 Chrome 邮递员调用端点时,我看到图像中附加的 500 内部服务器错误在此处输入图像描述