Spring 引导,Mockito,将模拟注入范围会话 bean
Spring Boot, Mockito, injecting mock into scope session bean
我在将模拟注入 class 我需要进行测试时遇到问题。我正在尝试模拟一个 Dao class 并且在我正在使用的各种服务中使用 ReflectionTestUtils 这样做没有问题,但是这个只是不想工作,它一直调用 Dao class 并且从数据库中获取错误。
这是测试class:
@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());
}
}
这是 class 我正在尝试将模拟注入:
@Component
@Scope(value="session", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class GrantedAuthoritiesLevelsHolder {
@Autowired
private UserDao userDao;
// some methods
}
加载上下文时,您必须将模拟 bean 注册为 UserDao
。您可以如下所示注册它。把它放在任何用 @Configuration
注释的 class 中
@Bean
@Primary
public UserDao UserDao() {
return mock(UserDao.class);
}
我认为您的配置可能不足以将模拟放入 Spring 上下文。
我的建议:
@MockBean(answer=Answers.RETURNS_SMART_NULLS)
UserDao userDao;
@Autowired
GrantedAuthoritiesLevelsHolder grantedAuthoritiesLevelsHolder;
它应该将模拟放入 Spring 上下文中,而且它应该给你提示 incorrect/missing 存根。
我在将模拟注入 class 我需要进行测试时遇到问题。我正在尝试模拟一个 Dao class 并且在我正在使用的各种服务中使用 ReflectionTestUtils 这样做没有问题,但是这个只是不想工作,它一直调用 Dao class 并且从数据库中获取错误。
这是测试class:
@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());
}
}
这是 class 我正在尝试将模拟注入:
@Component
@Scope(value="session", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class GrantedAuthoritiesLevelsHolder {
@Autowired
private UserDao userDao;
// some methods
}
加载上下文时,您必须将模拟 bean 注册为 UserDao
。您可以如下所示注册它。把它放在任何用 @Configuration
@Bean
@Primary
public UserDao UserDao() {
return mock(UserDao.class);
}
我认为您的配置可能不足以将模拟放入 Spring 上下文。
我的建议:
@MockBean(answer=Answers.RETURNS_SMART_NULLS)
UserDao userDao;
@Autowired
GrantedAuthoritiesLevelsHolder grantedAuthoritiesLevelsHolder;
它应该将模拟放入 Spring 上下文中,而且它应该给你提示 incorrect/missing 存根。