我正在尝试为我的服务层编写单元测试:
@SpringBootTest
class ClinicServiceTest {
@Mock
private ProcedureRepository procedureRepository;
@InjectMocks
private ClinicService clinicService;
@Test
void setProcedureStatus() {
when(procedureRepository.findById(1L)).thenReturn(Optional.of(initialEntity));
when(procedureRepository.saveAndFlush(expectedEntity)).thenReturn(expectedEntity);
Procedure assertProcedure = clinicService.setProcedureStatus(1L, "CANCELED");
}
}
Run Code Online (Sandbox Code Playgroud)
当我调用setProcedureStatus方法时,它会抛出 NullPointerException,因为我的服务类使用由 Spring 自动装配的 ModelMapper:
@Service
@RequiredArgsConstructor
public class ClinicService {
private final ProcedureRepository procedureRepository;
private final ModelMapper modelMapper;
public Procedure setProcedureStatus(Long procedureId, String status) {
...
return modelMapper.map(procedureEntity, Procedure.class);
}
Run Code Online (Sandbox Code Playgroud)
}
单元测试不会引发 Spring 上下文,这就是当我从测试中调用 ModelMapper 时,Service 中的 ModelMapper 为 null 的原因。有办法解决这个问题吗?
我有一个包含黑名单密码的文本文件,并将文件名设置为“身份验证”->“密码策略”->“keycloak 中的密码黑名单”。如果有简单的密码,例如
password
admin
user
Run Code Online (Sandbox Code Playgroud)
效果很好 - 当我尝试更改密码时,我看到了这条消息Error! Invalid password: password is blacklisted.
但是当我向此列表添加更复杂的密码时,就像Music.1%它不起作用 - 我可以将密码更改为此。
为什么它会如此有效?有没有办法将文件中的类似密码列入黑名单?