栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

@WithUserDetails和Spring Boot 1.4 TestEntityManager的问题

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

@WithUserDetails和Spring Boot 1.4 TestEntityManager的问题

这是关于

TestExecutionListener
回调和
@Before
测试方法的计时问题。

@WithUserDetails
由Spring
Security的支持
WithSecurityContextTestExecutionListener
,这将永远不会运行
一个
@Before
方法。因此,Spring
Security不可能看到您在您的
setUp()
方法中坚持使用数据库的用户。基本上这就是异常告诉您的内容:Spring
Security尝试从数据库中读取用户,然后再将其存在。


解决此问题的一种方法是迁移以

@Sql
支持在数据库中插入测试数据。您可能不会发现像持久保存实体那样 舒适但是
这种
@Sql
方法允许在测试管理的事务中创建测试数据(即不需要手动清理)。请注意,您必须升级到Spring Security 4.1.1才能正常工作。

解决此问题的另一种方法是

@BeforeTransaction
使用一种方法(例如,使用Spring的方法)将实体保留在用户管理的事务中
TransactionTemplate
。但是,您随后将需要以
@AfterTransaction
类似方式手动清理数据库。另外,您仍然需要升级到Spring
Security 4.1.1才能使它起作用。

如下所示的方法可以解决问题:

@Autowiredprivate TestEntityManager testEntityManager;@AutowiredPlatformTransactionManager transactionManager;@BeforeTransactionpublic void setUp() {    new TransactionTemplate(transactionManager).execute(status -> {        UserAccount owner = testEntityManager.persist(createUserAccount(OWNER_OF_ADVERTISEMENT_EMAIL));        Language language = testEntityManager.persist(createLanguage("Français"));        DayToTimeSlot dayToTimeSlot = testEntityManager.persist(createDayToTimeSlot());        advertisement = testEntityManager.persist(createAdvertisement(owner, language, dayToTimeSlot));        impersonator = testEntityManager.persist(createUserAccount(IMPERSONATOR_EMAIL));        return null;    });}@AfterTransactionpublic void tearDown() {    new TransactionTemplate(transactionManager).execute(status -> {        testEntityManager.remove(testEntityManager.find(Advertisement.class, advertisement.getId()));        UserAccount owner = advertisement.getUserAccount();        testEntityManager.remove(testEntityManager.find(UserAccount.class, owner.getId()));        testEntityManager.remove(testEntityManager.find(UserAccount.class, impersonator.getId()));        return null;    });}

问候,

山姆



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/509687.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号