當Mock註解和Spring註解衝突時
阿新 • • 發佈:2019-02-05
在使用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(); }
即可解決注入失敗問題。