我想用Spring定義一個我自己的組件。定義Spring組件時出錯
下面有我的代碼:
MyPasswordEncoderConfig:
@Configuration
@ComponentScan(basePackages = { "my.package" })
public class CryptoConfig {
@Bean
public PasswordEncoder getPasswordEncoder() {
return new BCryptPasswordEncoder();
}
}
MyPasswordEncoder:
@Component
public class MyPasswordEncoder {
@Autowired
private PasswordEncoder passwordEncoder; // Defined in Spring Security.
public String encode(String plainTextPassword) {
return passwordEncoder.encode(plainTextPassword);
}
public boolean matches(String encodedPasswordA, String encodedPasswordB) {
return passwordEncoder.matches(encodedPasswordA, encodedPasswordB);
}
}
MyPasswordEncoderTest:
@ContextConfiguration(classes = {MyPasswordEncoder.class, MyPasswordEncoderConfig.class})
@RunWith(SpringJUnit4ClassRunner.class)
public class MyPasswordEncoderTest {
@Mock
private PasswordEncoder passwordEncoder;
@InjectMocks
@Autowired
private MyPasswordEncoder myPasswordEncoder;
@Before
public void init() {
MockitoAnnotations.initMocks(this);
}
@Test
public void testPasswordMatching() {
String plainTextPassword = "[email protected]@@";
String encodedPassword = myPasswordEncoder.encode(plainTextPassword);
assertTrue(myPasswordEncoder.matches(plainTextPassword, encodedPassword));
}
}
當我運行測試時,它失敗。使用標準輸出檢查結果,passwordEncoder.encode(plainTextPassword);
返回空值。
我在做什麼錯?
UPDATE:
問題是關於的PasswordEncoder接口。如果我用替換它BCryptPasswordEncoder,測試工作正常。
你認爲它應該返回,爲什麼? –
它必須使用BCrypt算法返回散列。 – vdenotaris
你覺得'@ Mock'有什麼用?你認爲'InjectMocks'有什麼作用? –