@RestController
@RequestMapping("/xxx")
class TestController {
private RetriveDataService retriveDataService;
public TestControllerx(RetriveDataService retriveDataService) {
this.retriveDataService = retriveDataService;
}
@PostMapping(value = "/yyy")
public MyResponseModel myMethod(@RequestBody MyRequestModel model) {
return retriveDataService.retriveData(model);
}
}
@Service
class RetriveDataService {
private TokenService tokenService;
public RetriveDataService(TokenService tokenService) {
this.tokenService = tokenService;
}
public MyResponseModel retriveData(MyRequestModel model) {
String accessToken = tokenService.getToken().getAccessToken();
return retriveData(model, accessToken);
}
}
@RunWith(SpringRunner.class)
@WebMvcTest(TestController.class)
public class TestControllerTest {
@Autowired
private MockMvc mvc;
@Autowired
private ObjectMapper objectMapper;
@MockBean
private RetriveDataService retriveDataService;
@Test
public void testRetriveData() throws Exception {
mvc.perform(MockMvcRequestBuilders.post("/xxx/yyy").content(objectMapper.writeValueAsString(new MyRequestModel()))
.contentType(MediaType.APPLICATION_JSON_UTF8)).andDo(MockMvcResultHandlers.print())
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8));
}
}
当我运行这个测试时,我会得到以下输出(如果我的服务不需要另一个bean,我会得到预期的输出)
MockHttpServletResponse:
Status = 200
Error message = null
Headers = []
Content type = null
Body =
Forwarded URL = null
Redirected URL = null
Cookies = []
由于这个响应,我在line.andExpect(content().contentType(Mediatype.application_json_utf8));上遇到了问题。当我检查response body时(因为body也是空的)
再现问题的示例项目在这里
检查您的存储库,确认了问题评论中讨论的假设。
在模拟上指定期望
MyModel requestMessage = new MyModel();
requestMessage.setMessage("Hello Request Post");
given(testService1.getMessage(requestMessage)).willReturn(responseMessage);
但@webmvctest
中的控制器中接收到的消息不等于测试中指定的requestMessage。这是由于MyModel
类不重写equals
方法。在这种情况下,Mockito将使用其默认行为:
有关选项2的更多信息:
从技术上讲,你的预期相当于:
given(testService1.getMessage(ArgumentMatchers.eq(requestMessage)))
.willReturn(responseMessage);
您可以使用其他匹配器,甚至可以定义自己的匹配器。如果您不能修改参数类型的代码(类型来自第三方库等),这将非常有用。例如,可以使用argumentmatchers.any(MyModel.Class))
我想实例化OrderAbstraction服务,它需要在测试用例的构造函数中使用实体管理器。 我尝试自动连接OrderAbstractionTest,并将OrderAbstraction和实体管理器作为参数。 my service.yaml,autowire设置为true 我一直收到这样的东西: PHP致命错误:Uncaught ArgumentCounter错误:函数App\Test\Order
我想知道是否有办法模拟正在自动连线的场。 考虑下面的情况。 我有一个班级名A 另一个B类看起来像这样 现在我想为这个方法编写junit。 我知道有一种方法可以像这样模拟自动连线场。 但我的问题是- eg 请提出建议,否则就没有办法了???? 我不想改变私人生活。我也不想添加getter和setter或reflection。我只是想知道,在创建一个类的新对象之后,有没有办法模拟B实例。
我有一个类。并且我已经编写了一个类的单元测试方法的类。我的代码如下:- 在我的单元测试课上,我编写了以下方法。 当我执行测试类,我得到错误。这是因为在类中,在方法的第8行中,学生机构映射字段为null。这只发生在模拟对象上。如何获得模拟对象的自动生成字段?
我有一个 Rest Controller 类,其中我正在自动布线服务层。现在我想模拟测试类中的服务层,但在运行我的测试类 控制器代码 测试类 我是JUnit5和Mockito的新手。有人能告诉我哪里错了吗?
我读了很多关于如何模拟Spring的bean和它们的自动连线场的文章。但我找不到任何关于豆子的autowired列表。 具体问题 我想测试一下这门课。但我找不到模拟属性的方法。 我所尝试的 由于是单例,我尝试模拟这些bean的几个实例,希望它们能够反映在中,但没有成功。 然后,我尝试创建一个列表,该列表被注释为。通过手动启动,我希望注入创建的列表。这仍然没有成功。 在中抛出了一个NPE,我认为这会
问题内容: 如果Service类使用Validated注释进行注释,则同一类无法自动装配自身。 这是在Spring Context尝试加载时引发的异常: 同样,当您有很多依赖于类的自身时,就会发生这种情况(当某个服务使用使用第一个服务的其他服务时)。我想知道@Validated注解,但是我总是在bean上遇到同样的错误。 有人知道我该怎么解决吗? 问题答案: 在这种情况下,注释与错误的自动装配无关