这里的问题是,您的Mock实例和实例
ValidSessionChecker都不是Spring
Bean,因此没有连接到
ValidSessionCheckerSpring托管的实例中。相反,要制作模拟Spring
Bean,可能更好的方法是创建另一个Bean定义文件,该文件扩展基本配置文件中定义的Bean并添加模拟:
test-config.xml:
<beans...> <import resource="base-springmvc-config.xml"/> <beans:bean name="usersDatabaseAccessProvider" factory-method="mock" > <beans:constructor-arg value="..UsersDatabaseAccessProvider"></beans:constructor-arg></beans:bean>
然后在测试中将行为注入到模拟中:
public class AccessControlControllerTestsWithInjectedMocks { @Autowired private org.springframework.web.context.WebApplicationContext wac; private MockMvc mockMvc; @Autowired UsersDatabaseAccessProvider usersDatabaseAccessProvider; @Autowired ValidSessionChecker validSessionChecker; .... @Before public void before() throws Throwable { //given MockitoAnnotations.initMocks(this); when(usersDatabaseAccessProvider.sessionNotExpired("123456")).thenReturn(Boolean.FALSE); this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build(); }这应该可以正常工作。



