在使用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();
}
即可解决注入失败问题。