为什么我的模拟的rest控制器方法的单元测试不起作用?

时间:2018-10-03 14:23:07

标签: spring-boot mockito

我尝试对控制器中的方法进行虚拟测试,但不起作用,我有一个空指针异常,我想知道为什么它不起作用,我精确地说这是我第一次这种测试。

这是我的休息控制器:

@RestController
@RequestMapping("/api")
public class AdminController {

    @Autowired
    private UserService userService;

 @Secured(value = "ROLE_ADMIN")
    @GetMapping("/roles")
    public ResponseEntity<List<Role>> getRoles(){

        return new  ResponseEntity(userService.getRoles(), HttpStatus.OK);
    }

这是我的控制器测试:

@RunWith(SpringRunner.class)
@WebMvcTest(value = AdminController.class, secure = false)

public class AdminControllerTest {


    private MockMvc mvc;


    @MockBean
    UserService userService;
 @Test
    public void getRoles() throws Exception{

        Role role=new Role("Admin");

        List<Role> roles=Arrays.asList(role);
        given(userService.getRoles()).willReturn(roles);
        mvc.perform(get("/api/roles")).andExpect(status().isOk());

    }

当我为此方法运行测试时,我遇到了这样的错误:

enter image description here

预先感谢您的帮助

1 个答案:

答案 0 :(得分:1)

尝试一下。它应该工作。我认为您错过了@Autowired注解

@RunWith(SpringRunner.class)
    @WebMvcTest(value = AdminController.class, secure = false)
    public class AdminControllerTest {

        @Autowired
        private MockMvc mvc;
        @MockBean
        UserService userService;
        @Test
        public void getRoles() throws Exception{

            Role role=new Role("Admin");

            List<Role> roles=Arrays.asList(role);
            given(userService.getRoles()).willReturn(roles);
            mvc.perform(get("/api/roles")).andExpect(status().isOk());

        }
    }