当Mock注解和Spring注解冲突时

在使用Mack对SpringMVC工程进行单元测试的时候会碰到注入冲突的问题,造成@Mack注入失败的情况此时的解决办法是:
使用Java反射进行属性注入。
给出下面的例子:

  • Test类

    public class HomeControllerTest extends TestCase {
        private MockMvc mockMvc;
        @InjectMocks
        private HomeController homeController;
        @Mock
        private UserService userService;
        @Before
        public void setUp(){
        MockitoAnnotations.initMocks(this);
        this.homeController = new HomeController();
        this.mockMvc = MockMvcBuilders.standaloneSetup(this.homeController).build();
    .....
    }
    
  • Controller类

    public class HomeController {
        @Autowired
        private UserService userService;
        .....
        }
    

在这种情况下就会造成@Mock和@Autowired注入冲突,导致注入失败。
可以将测试类中加入反射注入即可:

@Before
public void setUp(){
    MockitoAnnotations.initMocks(this);
    this.homeController = new HomeController();
    ReflectionTestUtils.setField(homeController,"userService",userService);
    this.mockMvc = MockMvcBuilders.standaloneSetup(this.homeController).build();
}

即可解决注入失败问题。

你可能感兴趣的:(语言探索)