【问题标题】:Springboot Mockito : Mocked service method returning nullSpringboot Mockito:模拟服务方法返回null
【发布时间】:2020-05-17 22:21:30
【问题描述】:

我正在尝试使用 mockito 测试我的 springboot 服务,但从我的模拟服务中得到空响应 代码编译,服务也完美运行,但测试用例失败,因为模拟服务返回 null。

服务类


    @RestController
    @RequestMapping(path = "/my-tracker")
    public class MyTrackerController {

    private static final Logger logger = LoggerFactory.getLogger(MyTrackerController .class); 

    @Autowired
    private TrackerService trackerService;

    @RequestMapping(value = "/track/{id}", method = RequestMethod.GET, produces = "application/json")
    public String getTrackerDetails(@PathVariable("id") String id) 
        {

        String response = trackerservice.track(id);  // <= this is returning null 

        return response;
        }

    }

测试类

    @RunWith(SpringRunner.class)
    @WebMvcTest(value = MyTrackerController.class)
public class MyTrackerControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @MockBean
    private TrackerService trackerService ;

    @Test
    public void getTrackerDetailsTest() throws Exception {

        String response= "MyLocation";


        Mockito.when(
                trackerService.track(
                        Mockito.anyString())).thenReturn(response);


        RequestBuilder requestBuilder = MockMvcRequestBuilders.get(
                "/my-tracker/track/123").accept(
                MediaType.APPLICATION_JSON);

        MvcResult result = mockMvc.perform(requestBuilder).andReturn();

        System.out.println(result.getResponse());

        JSONAssert.assertEquals(response, result.getResponse()
                .getContentAsString(), true);
        }
    }

非常感谢任何帮助/建议。 使用的 Springboot 版本:2.3.0.RELEASE。

写测试用例参考博客:https://www.springboottutorial.com/unit-testing-for-spring-boot-rest-services

附言:我能够从上面的博客代码中成功运行测试用例,但我的模拟服务返回 null。除了 spring-boot-starter-web 和 spring-boot-starter-test 之外,也没有添加额外的 jars

【问题讨论】:

  • 可能是您在 pom.xml 中的 Mockito 文件的依赖项不匹配。确保没有版本冲突。

标签: spring-boot unit-testing mockito microservices


【解决方案1】:

我能想到的一个原因:

根据getTrackerDetails的RequestMapping,JSON字符串应该作为响应返回(produces = application/json)

尝试在您的测试用例中返回一个有效的 JSON 作为响应。

例子:

String response = "\"field\":\"value\"";

【讨论】:

  • “@RestController”负责 json 转换。我们不需要明确地这样做。我的问题也是模拟 bean 返回空对象。
  • 我的错,对不起,我误读了这个问题。能不能加个调试点,看看trackservice是不是mock service?
猜你喜欢
  • 2020-01-21
  • 2021-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多