代码之家  ›  专栏  ›  技术社区  ›  AragornSG

Spring引导,Mockito,将mock注入scope会话bean

  •  1
  • AragornSG  · 技术社区  · 6 年前

    这是测试类:

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration
    @WebAppConfiguration
    public class DedicationControllerTest extends AbstractRestTest {
    
        @Mock
        UserDaoImpl userDao;
    
        @Autowired
        @InjectMocks
        GrantedAuthoritiesLevelsHolder grantedAuthoritiesLevelsHolder;
    
        @Test
        public void shouldTest() throws Exception {
            //given
            String json = this.getJsonFromFile("json/my.json");
    
            Mockito.when(userDao.getUser(Mockito.anyString())).thenReturn(new User(1l, "mock"));
            ReflectionTestUtils.setField(grantedAuthoritiesLevelsHolder, "userDao", userDao);
    
            ResultActions result = mockMvc.perform(post( controllerUrl + "/action")
                .contentType(MediaType.APPLICATION_JSON_UTF8)
                .content(json));
    
            // then
            result
                .andExpect(status().isOk());
        }
    }
    

    这就是我想把mock注入的课程:

    @Component
    @Scope(value="session", proxyMode = ScopedProxyMode.TARGET_CLASS)
    public class GrantedAuthoritiesLevelsHolder {
    
        @Autowired
        private UserDao userDao;
    
            // some methods
    }
    
    2 回复  |  直到 6 年前
        1
  •  0
  •   staszko032    6 年前

    我的建议是:

    @MockBean(answer=Answers.RETURNS_SMART_NULLS)
    UserDao userDao;
    
    @Autowired
    GrantedAuthoritiesLevelsHolder grantedAuthoritiesLevelsHolder;
    

    它应该在Spring上下文中放置一个mock,而且它应该给您错误/缺少stubing的提示。

        2
  •  1
  •   Yogesh Badke    6 年前

    你必须注册mocked bean为 UserDao @Configuration

    @Bean
    @Primary
    public UserDao UserDao() {
        return mock(UserDao.class);
    }