我正在尝试测试我的PreUpdateEventListener流,但我似乎无法使其在JUnit测试中工作。我没有收到任何错误,但没有调用代码。
我的PreUpdateEventListener:
@Component
public class CandidateListener implements PreUpdateEventListener {
@Autowired
EntityManagerFactory entityManagerFactory;
@PostConstruct
private void init() {
HibernateEntityManagerFactory hibernateEntityManagerFactory = (HibernateEntityManagerFactory) this.entityManagerFactory;
SessionFactoryImpl sessionFactoryImpl = (SessionFactoryImpl) hibernateEntityManagerFactory.getSessionFactory();
EventListenerRegistry registry = sessionFactoryImpl.getServiceRegistry().getService(EventListenerRegistry.class);
registry.appendListeners(EventType.POST_LOAD, this);
registry.appendListeners(EventType.PRE_UPDATE, this);
}
@Override
public boolean onPreUpdate(PreUpdateEvent event) {
final Object entity = event.getEntity();
if (entity == null) return false;
// code here not being called in unit tests, but works fine on server
return false;
}
}
测试:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
@IntegrationTest
@Transactional
public class CandidateListenerTest {
@Autowired
CandidateRepository candidateRepository;
@Autowired
EntityAuditEventRepository entityAuditEventRepository;
@Autowired
SessionFactory sessionFactory;
@Test
public void testHistoryLogging() {
Candidate cand = new Candidate();
cand.setEmail("123@gmail.com");
cand.setFirstName("12");
cand.setLastName("3");
cand = candidateRepository.save(cand);
cand.setLastName("34");
candidateRepository.save(cand);
assertEquals(entityAuditEventRepository.findAll().size(), 1);
}
}
我曾尝试将SessionFactory注入测试并调用SessionFactory#flush方法,但这不会引发CurrentContextSession错误,我似乎无法修复。
终于解决了这个问题。
我一直在尝试注入EntityManager并从那里调用flush,但实际输出没有变化(代码仍然没有被调用)。
对我来说,解决方案的灵感来自这里,让我的最终测试看起来像这样:
@Test
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void testHistoryLogging() {
Candidate cand = new Candidate();
cand.setEmail("123@gmail.com");
cand.setFirstName("12");
cand.setLastName("3");
cand = candidateRepository.save(cand);
cand.setLastName("34");
candidateRepository.save(cand);
assertEquals(entityAuditEventRepository.findAll().size(), 1);
}
基本上每个调用都是以非事务性方式执行的,这会在调用存储库中的保存方法后将候选对象保存到数据库中。
我在pycharm中调试单元测试时遇到问题。我可以使用我的配置很好地运行它们,但当我运行调试器时,会得到以下错误输出: 我的目录结构是: 我的unittest配置是: 看起来像: 做什么?如何确保在调试期间找到它?问题实际上与正在查找的文件/目录无关吗?
我不熟悉单元测试。参考google之后,我创建了一个测试类来测试我的控制器,如下所示: 我有以下控制器和服务类: 当我调试单元测试时,控制器中的p对象为null。我的状态是200,但不是预期的JSON响应 我错过了什么?
在Spring Boot应用程序中,我访问Hibernate会话,如下所示:https://stackoverflow.com/a/33881946/272180 我的单元测试类类似于以下自动取款机: 引用具有用于运行Spring Boot应用程序的main方法的类。
我已经创建了一个应用程序使用Springboot和Hibernate,我想配置它的单元测试。 首先,这是DAO接口。 这是DAO接口的实现 然后我创建了一个测试类,如下所示 我已经将application.properties文件放在test和src目录的资源中。 我尝试运行此单元测试用例,但由于以下错误而失败: 那么我可以知道为DAO层配置单元测试的最佳方法吗?
晚安, 我正在对我的服务进行一些测试,在删除方法中执行测试时遇到了问题。 我想知道是否有人犯过这个错误,可以帮助我。 我扫描时出错。据报道,该方法没有使用。 例外情况: 代码:
我使用Spring Web模块编写RESTAPI,使用WebClient类调用外部API,并使用block()方法等待响应。 我知道我应该使用Spring WebFlux以完全非阻塞的方式编写RESTAPI。但这不是一个选择。 我在编写单元测试和模拟WebClient时遇到问题。我在Stack Overflow中读到了一些WebClient模拟线程,但在我的案例中似乎没有一个能正常工作。 以下是我