1. 程式人生 > >當Mock註解和Spring註解衝突時

當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();
}

即可解決注入失敗問題。