当我使用surefire设置时,为什么我的测试会抛出随机异常parallel=methods?
我创建了一个创建用户帐户的服务方法.如果由于给定的电子邮件地址已经在我们的数据库中而导致创建失败,我想向用户发送一封电子邮件,说明他们已经注册:
@Transactional(noRollbackFor=DuplicateEmailException.class)
void registerUser(User user) {
try {
userRepository.create(user);
catch(DuplicateEmailException e) {
User registeredUser = userRepository.findByEmail(user.getEmail());
mailService.sendAlreadyRegisteredEmail(registeredUser);
}
}
Run Code Online (Sandbox Code Playgroud)
这不起作用.虽然我标记DuplicateEmailExcepetion为"无回滚",但第二个SQL查询(findByEmail)仍然失败,因为事务已中止.
我究竟做错了什么?
@Transactional存储库中没有注释.
在布尔模式下apple*会找到apple, apples, applestore.但它找不到我(虚拟的话)Mapple, Trapple.所以我尝试使用,*apple但这不起作用.
是不是可以通过全文搜索找到以苹果结尾的单词?或者我错过了文档中的内容?
我想做的一个例子:
double delta = 0.000001d;
Number myNumber = resultOfSomeTestExecution();
Assert.assertEquals(5, myNumber, delta);
Run Code Online (Sandbox Code Playgroud)
我想断言结果是 5,或者在合理的增量间隔内至少接近 5,但我不在乎它是 Integer、Long、Double、BigDecimal 还是其他类型。有没有可以做到这一点的断言库?
我有一组基于Spring的测试。
为了快速执行测试,我想确保Spring上下文仅初始化一次,然后所有测试都应针对该上下文运行,然后将其关闭。
我已经尝试了以下方法:
@RunWith(SpringJUnit4ClassRunner.class)和@ContextConfiguration(MyAnnotatedConfig.class)初始化spring上下文@RunWith(SpringJUnit4ClassRunner.class)和@TestExecutionListeners({MyTestExecutionListener.class})与手写测试执行侦听器一起使用,该侦听器将初始化spring上下文并将其注入到具体的测试类中@BeforeClass在基类和静态字段中使用侦听器来存储spring上下文,以及@AfterClass用于关闭的使用这三种方法,spring上下文似乎不止一次被初始化,这需要很多时间。看起来JUnit在运行测试时会卸载类,因此有时会丢失静态字段的内容。
有没有办法确保spring上下文仅初始化一次?
java ×4
junit ×2
spring ×2
jdbctemplate ×1
junit4 ×1
maven-3 ×1
mysql ×1
postgresql ×1
spring-boot ×1
spring-test ×1
sql ×1