Я пытаюсь протестировать пружинный интерфейс репозитория JPA, чтобы убедиться, что мои сопоставления верны.Моя сущность расширяет базовую сущность, которая помечена ..
@EntityListeners(BaseEntityEventListener.class)
@MappedSuperclass
public abstract class BaseEntity {...
Прослушиватель событий заполняет некоторые свойства аудита ..
public class BaseEntityEventListener {
@PrePersist
public void onPreInsert(BaseEntity baseEntity){
MyUserPrincipal principal = (MyUserPrincipal) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
String username = principal.getUsername();
baseEntity.setCreationUser(username);
Timestamp ts = new Timestamp(System.currentTimeMillis());
baseEntity.setCreationDate(ts);
}...
Это нормально, но когда я хочу проверить хранилищеЯ получаю нулевой указатель для SecurityContextHolder.
@RunWith(SpringRunner.class)
@SpringBootTest
public class RepositoryTest {
@Autowired private MyRepository myRepo;
@Test
public void testSaveEntity() throws Exception {
Entity entity = new Entity(TEST_ID);
myRepo.save(entity);
}...
Когда класс прослушивателя событий вызывается из теста, контекст безопасности не устанавливается.Я пытался использовать @WithMockUser, но это не похоже на работу.Могу ли я обернуть вызов в контекст безопасности в службе, а затем каким-нибудь образом смоделировать этот вызов в моем интеграционном тесте.Как установить макет прослушивателя сущностей, если это опция?Когда я использую @CreatedBy и @CreatedDate, контекст безопасности не является проблемой, но мне нужно вручную использовать @PreInsert по отдельной причине.