[英]How to Unit test JPA idclass
我正在努力编写/理解 Intellij IDE 中 JPA 继承 @idClass 的单元测试。 运行代码覆盖率测试时,IDE 显示 5/6 方法覆盖。 但是这个类只有五个方法。 第6种方法在哪里? 我错过了什么?
package com.beetlehand.model;
import javax.persistence.*;
import java.util.Objects;
@Entity
@Table(name = "product_attribute", schema = "beetlehand", catalog = "")
@IdClass(ProductAttributeEntityPK.class)
public class ProductAttributeEntity {
private int productId;
private int attributeValueId;
/*** Getters and Setters ***/
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ProductAttributeEntity that = (ProductAttributeEntity) o;
return productId == that.productId &&
attributeValueId == that.attributeValueId;
}
@Override
public int hashCode() {
return Objects.hash(productId, attributeValueId);
}
}
和单元测试
package com.beetlehand.model;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
public class ProductAttributeEntityPKTest {
@Test
void testGetProductId() {
ProductAttributeEntity entity = new ProductAttributeEntity();
entity.setProductId(1);
entity.setAttributeValueId(1);
assertEquals(1, entity.getProductId());
}
@Test
void testGetAttributeValueId() {
/*** test logic ***/
assertEquals(1, entity.getAttributeValueId());
}
@Test
void testEquals() {
/*** test logic ***/
assertEquals(true, entity.equals(entity2));
}
@Test
void testHashCode() {
/*** test logic ***/
assertEquals(entity2.hashCode(), entity.hashCode());
}
}
我在想if
语句中的每个控件都会增加coverage的值。 您无法获得100% 的 covarage值,因为您没有在equals
方法中提供所有控件。 您必须在单元测试方法中提供所有控件(相同对象、空对象、不同类对象)。
!!! 您必须首先检查空对象,否则在提交空对象时会得到NullPointerException 。
我也想提出测试建议。 首先,我建议您研究单元测试命名约定。 例如,您可以查看此标题 -> 单元测试命名最佳实践
@Test
void equals_WhenObjectIsNull_ShouldReturnFalse() {
}
@Test
void equals_WhenObjectIsSame_ShouldReturnTrue() {
}
我的另一个建议是,您可以在@Before
注释下创建实体对象并减少代码行。
public ProductAttributeEntity entity;
@Before
public void setUp() {
entity = new ProductAttributeEntity();
entity.setProductId(1);
entity.setAttributeValueId(1);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.