【发布时间】:2022-01-13 23:27:29
【问题描述】:
我正在使用 Spring 安全性并希望对我的服务返回的密码进行单元测试。但是,由于这是加密的,我试图模拟执行此加密的方法,该方法位于从 WebSecurityConfigurerAdapter 扩展的类中。
@Override
public void configure(AuthenticationManagerBuilder auth){
auth.userDetailsService(userDetailsService).passwordEncoder(NoOpPasswordEncoder.getInstance());
}
所以我正在尝试这样的事情
@Autowired
AuthenticationManagerBuilder auth;
static class PasswordEncoderTest implements PasswordEncoder {
@Override
public String encode(CharSequence charSequence) {
return charSequence.toString();
}
@Override
public boolean matches(CharSequence charSequence, String s) {
return charSequence.toString().equals(s);
}
}
@Test
void testCreateUser() throws Exception {
UserCreateDto userCreateDto = new UserCreateDto("user", "test", "user@gmail.com", "user@gmail.com", "123456", "basic");
User userMocked = new User(userId, "user", "test", "user@gmail.com", "user@gmail.com", "123456", "basic");
PasswordEncoderTest passwordEncoderTest = new PasswordEncoderTest();
passwordEncoderTest.encode("123456");
when(auth.userDetailsService(myUserDetailsService).passwordEncoder(NoOpPasswordEncoder.getInstance())).thenReturn(auth.userDetailsService(myUserDetailsService).passwordEncoder(passwordEncoderTest));
userCreateDto = userCommandService.createUser(userCreateDto);
assertEquals(userMocked.getPassword(), userCreateDto.getPassword());
}
但它失败了DaoAuthenticationConfigurer cannot be returned by generateToken() generateToken() should return String
不确定该方法是否正确以及我可能做错了什么。
谢谢。
更新
https://github.com/francislainy/adverts-backend/tree/dev_jwt
根据我与 Palx 的对话,我似乎应该注入密码编码器而不是 bycript,并且在主类和测试类之间有不同的配置。将尝试并返回此处进行进一步更新。
【问题讨论】:
-
没有看到
createUser的实现是不可能的,但是你的when(...)看起来好像不应该工作。
标签: java unit-testing spring-security mockito