问题标签 [mockmvc]

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 投票
4 回答
13934 浏览

java - Spring-test 集成测试中的自动装配 HttpServletRequest

我正在尝试进行测试以涵盖登录功能。Spring 的版本是 3.2.12。我有一个会话 bean,声明为:

这在服务器上运行时效果很好,但是当使用 spring-test 的方式运行时,问题就来了。这是我的测试方法:

经过调试,我发现,当启动测试spring上下文时,在ServletTestExecutionListener.setUpRequestContextIfNecessary中创建了一个MockHttpServletRequest的实例,MockHttpServletRequest request = new MockHttpServletRequest(mockServletContext); // 让我们称这个实例为 A。这是到处注入的实例,我使用

而调用 MockMvc.perform 会创建另一个 MockHttpServletRequest 实例(我们称其为实例 B),该实例将传递给所有过滤器、servlet 等。因此,基本上,我在请求中的过滤器中设置的属性不能在 ClientSessionServiceImpl 中读取,因为在那里注入了不同的 MockHttpServletRequest 实例。

我花了很多时间在这上面,但仍然没有找到解决方案。

PS我通过StackOverflow搜索,有类似标题的问题,但描述的问题与我的不同,因为我不想将HttpServletRequest作为参数传递,并且更愿意让它自动装配,除非有充分的理由它。

0 投票
2 回答
106 浏览

spring - Mocked repository does not trigger as expected

I have a Controller Unit test using Mockito and MockMvc.

After a POST request, the POSTed object is resolved correctly, but my repository mock is not triggered.

Here is the mock code:

So this really just should simulate the saving of an object (ID is set and a route is generated out of it).

Unfortunately, the repository always returns null, so my code later fails when trying to return a new created Route out of null.

The mocks are correctly injected and do work for e.g. String comparison or if I only check for the function to have been called, I just can't get it to trigger on Objects.

The same issue occurs on

it does not trigger.

The questions would be: 1.) Why does the mock not trigger? I suppose it does not check for value equality in the object, but for object identifiers, which are not the same since the object is serialized and de-serialized in between.

2.) How can I get a generic mock? e.g. whenever repository.save() is called, no matter the parameter, it always should perform a specific way, e.g. instead of

I'd like to have

P.S. If for whatever reason you need the rest of the code, here is the submitted part, object is the json representation of the notification (with jackson)

and here is the Controller header, the Object is de-serialized perfectly, the values are 1:1 the same

Thanks for helping.

0 投票
2 回答
3811 浏览

java - Spring MVC Junit 测试 MultipartFile 始终为空

我正在使用带有 Junit 4.12 和 java 1.7 的 spring-mvc 版本 4.1.6-RELEASE,我有一个用于文件上传的控制器,当我使用浏览器在服务器上对其进行测试时,它可以工作。但是,当我尝试使用 junit 对其进行测试时,mockfilemultipart 始终为空,我确定在测试类中并非如此。

这是我的 servlet-context.xml

这是控制器

然后是我用于测试的抽象类

最后是扩展上述类的测试类

在 UploadPianoAttivitaController 的上传方法中,当我运行 Junit 时,参数文件 [] 包含 1 个空的 MultiPartFile,而当我在服务器上运行它并从页面上传文件时,一切正常。

0 投票
2 回答
3025 浏览

spring-mvc - MockMVC 将测试控制器与会话范围 bean 集成

我正在尝试集成测试一个 Spring Controller 方法,该方法使用注入到控制器中的 Spring 会话范围 bean。为了让我的测试通过,在我对这个控制器方法进行模拟调用之前,我必须能够访问我的会话 bean 以在其上设置一些值。问题是在我进行调用时创建了一个新的会话 bean,而不是使用我从模拟应用程序上下文中提取的那个。如何让我的控制器使用相同的 UserSession bean?

这是我的测试用例

这是我需要测试的控制器方法

它没有通过这条线,因为 UserSession 对象不一样 if(userSession.isEmployee() && userSession.getAuthorizationLevel() >= 3){

这是我的用户会话 bean 的声明。

控件和 bean 都是使用我的 applicationContext.xml 中的组件扫描创建的

0 投票
1 回答
485 浏览

spring - Spring MockMvc 修剪参数

我遇到了一个让我难过的问题。我正在运行最新版本的 Spring 和 JUnit。我正在试验 MockMvc 和 Spring 集成测试类,以查看它是否符合我公司的需求并且运行良好,直到我尝试提交包含 @PathVariable 的请求,它是 url 中的版本号。

绒球;

示例控制器;导入 junit.framework.Assert;

测试类;

我的 appContext.xml 文件只包含这一行(除了最初的 beans 标记和结束标记);

当我查看进入示例控制器的请求时,我可以通过调试器看到它​​显示 /example/appVersion/1.0.0.0 但路径变量始终设置为“1.0.0”。似乎最后一个 .0 总是被丢弃,因为如果我传入“1.0.0.0.0”,它会修剪为预期的“1.0.0.0”。

任何对可能导致这种情况或我做错了什么的见解将不胜感激。

谢谢你。

0 投票
1 回答
6023 浏览

java - 错误 java.lang.IllegalArgumentException:令牌“multipart/form-data”中的令牌字符“/”无效

我有以下测试用例。当我运行它时,我收到错误“java.lang.IllegalArgumentException: Invalid token character '/' in token "multipart/form-data"”。

完整的堆栈跟踪:

我在上传文件的控制器上运行上述测试用例时得到了它。

更新:我在这一行得到错误:

0 投票
0 回答
401 浏览

java - 带有 MockMvc 发布请求的 Junit Spring Portlet

需要在 Junit 中使用 mockmvc 测试动作响应中的重定向

控制器.java

控制器测试.java

问题是,在 Junit 的后期执行中没有调用控制器方法。

单击提交时浏览器中的 url 看起来像action/rparam=action=submit.wsp

0 投票
2 回答
1335 浏览

java - 使用 Spring、JUNIT、MockMvc 和 Hamcrest 测试控制器

我正在尝试测试我的一个控制器,它在 get 方法上返回一个对象列表以填充我页面上的下拉列表。

我正在尝试使用 MockMvc 和 Hamcrest 编写一个 JUnit 测试来测试它。

我想比较对象列表并测试它是否失败。

我在我的 Test.java 中创建了一个静态对象列表,并且我从 model.attribute 方法中获取了一个对象列表。

测试:如果两个对象列表相等并且不包含任何其他对象。

我的对象称为 Option,它有 3 个属性。键、值和选定。我必须检查列表中是否存在所有键。

我无法创建一个匹配器来做同样的事情。我正在尝试创建一个匹配器来比较我的列表。

到目前为止,我已经完成了以下工作:

这就是我获取模型属性的方式:

提前致谢。

0 投票
2 回答
642 浏览

java - 为什么这个 MockMvc 测试失败了?

这是我拥有的控制器:

和我的观点(唾沫)

效果很好..

但是,此测试失败:

留言:

但是在jsp中,看起来模型有属性spittleList,我错过了什么?

0 投票
3 回答
9491 浏览

java - 如何通过 Spring MockMvc 将日期对象作为请求参数传递

我有一个单元测试,它使用 Spring 的 MockMvc 测试框架来访问 REST 端点。其余端点要求发送两个字符串路径变量,以及作为@RequestParametersjava.util.Date传递的两个对象。当我运行测试时,它失败了,因为 Date 对象不存在,或者无法从字符串 JSON 表示序列化为 Date 对象。作为记录,在到达中列出的终点之前执行失败,所以这个问题不是来自被测试的代码。它来自测试。.perform()

这是我的测试:

端点如下所示:

这是 MockMvc 抛出的异常:

org.springframework.web.bind.MissingServletRequestParameterException:必需的日期参数“startDate”不存在

我的测试应用程序上下文如下所示:

我该怎么做才能将这些 Date 对象正确传递到上述休息端点?