gpt4 book ai didi

java - 测试 Spring Boot 存储库时不会引发预期的异常

转载 作者:行者123 更新时间:2023-12-02 09:16:46 24 4
gpt4 key购买 nike

我想在对业务对象 Product 执行 CRUD 操作时检查一些验证:

产品类:

@Getter
@Setter
@Entity
@Table(name = "PRODUCT")
public class Product extends AbstractEntity<Long> {

@Column(nullable = false)
private String name;

private String description;

@Column(nullable = false)
@Min(value = 0)
private Float cost;

@OneToMany(mappedBy = "product", fetch = FetchType.EAGER)
@Fetch(value = FetchMode.SELECT)
private Set<ProductRating> productRatings;

}

当我运行 Spring Boot 应用程序时,在添加没有强制性 nameProduct 时出现了所需的异常 (java.sql.SQLIntegrityConstraintViolationException) :

@SpringBootApplication
public class QlturkaApplication implements CommandLineRunner {

@Autowired
private ProductRepository productRepository;

@Autowired
private UserRepository userRepository;

@Autowired
private ProductRatingRepository productRatingRepository;

public static void main(String[] args) {
SpringApplication.run(QlturkaApplication.class, args);
}

@Override
public void run(String... args) throws Exception {

Product p = new Product();
productRepository.save(p);

}
}

但是当我运行测试时,没有nameProduct被保存在数据库中,被持久化并且具有唯一的ID,没有抛出异常,为什么?

@RunWith(SpringRunner.class)
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@ContextConfiguration(classes = WebSecurityConfig.class)
public class ProductRepositoryTest {

@Autowired
private ProductRepository productRepository;


@Test(expected = SQLIntegrityConstraintViolationException.class)
public void nullProductNameThrowsError() {
//java.sql.SQLIntegrityConstraintViolationException: Column 'cost' cannot be null
Product product = new Product();
product.setName(null);
productRepository.save(product);
System.out.println(product.getId());

}

public void afterTest(Product p) {
productRepository.delete(p);
}

}

最佳答案

因为data jpa tests默认情况下,每次测试结束时都会回滚,并且您永远不会在测试中明确刷新。因此,不会进行任何刷新,因此表中不会插入任何内容,因此数据库无法告诉您忘记插入名称。

保存后在测试中调用 flush()(或调用 saveAndFlush())。

关于java - 测试 Spring Boot 存储库时不会引发预期的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58924739/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com