- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个实体,想要实现 Audit 和 AuditHistory,两者都有效,但在单元测试时应用程序上下文为空。
实体
@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Entity
@EntityListeners(UserListener.class)
public class User extends BaseModel<String> {
@Column
private String username;
@Column
private String password;
@Transient
private String passwordConfirm;
@ManyToMany
private Set<Role> roles;
}
用户监听器
public class UserListener {
@PrePersist
public void prePersist(User target) {
perform(target, INSERTED);
}
@PreUpdate
public void preUpdate(User target) {
perform(target, UPDATED);
}
@PreRemove
public void preRemove(User target) {
perform(target, DELETED);
}
@Transactional(MANDATORY)
void perform(User target, Action action) {
EntityManager entityManager = BeanUtil.getBean(EntityManager.class);
if(target.isActive()){
entityManager.persist(new UserAuditHistory(target, action));
}else{
entityManager.persist(new UserAuditHistory(target, DELETED));
}
}
}
用户审核历史记录
@Entity
@EntityListeners(AuditingEntityListener.class)
public class UserAuditHistory {
@Id
@GeneratedValue
private Long id;
@ManyToOne
@JoinColumn(name = "user_id", foreignKey = @ForeignKey(name = "FK_user_history"))
private User user;
@CreatedBy
private String modifiedBy;
@CreatedDate
@Temporal(TIMESTAMP)
private Date modifiedDate;
@Enumerated(STRING)
private Action action;
public UserAuditHistory() {
}
public UserAuditHistory(User user, Action action) {
this.user = user;
this.action = action;
}
}
用于获取和设置上下文的 BeanUtil
@Service
public class BeanUtil implements ApplicationContextAware {
private static ApplicationContext context;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
context = applicationContext;
}
public static <T> T getBean(Class<T> beanClass) {
return context.getBean(beanClass);
}
}
现在是 Junit,我在 getBean() 方法中从上述 BeanUtil 类的上下文中获得空指针异常。
@RunWith(SpringRunner.class)
@DataJpaTest
public class UserRepositoryTest{
@Autowired
private TestEntityManager entityManager;
@Autowired
private UserRepository repository;
@Test
public void whenFindAll_theReturnListSize(){
entityManager.persist(new User("jk", "password", "password2", null));
assertEquals(repository.findAll().size(), 1);
}
}
最佳答案
这就是我在测试类中解决问题的方法
@AutowiredApplicationContext上下文;
在测试方法中调用
BeanUtil beanUtil = new BeanUtil();
beanUtil.setApplicationContext(context);
并且成功了。
关于java - AuditingEntityListener junit 找不到上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54912438/
我有一个实体,想要实现 Audit 和 AuditHistory,两者都有效,但在单元测试时应用程序上下文为空。 实体 @Setter @Getter @NoArgsConstructor @AllA
我在各自的字段上使用了@CreatedBy、@CreatedDate、@LastModifiedBy 和@LastModifiedDate 注释。通过使用@MappedSuperclass、@Enti
我有以下 JPA 实体: @EntityListeners(AuditingEntityListener.class) @Entity public class EntityWithAuditingD
我正在使用 JPA 和 Spring 的一部分(如事务管理、JPA 存储库),但我不使用 Spring 进行依赖注入(inject),而是将 Spring 部分视为 POJO 对象。到目前为止,它运行
我没有成功为我的 JPA 应用程序设置 CET 时区,该应用程序使用 AuditingEntityListener 来增加创建/上次修改日期。 我已经尝试过的事情: 在我的 application.p
我是一名优秀的程序员,十分优秀!