为我的MVC webapp编写一些常用测试,并在findById()测试时停止。 我的模型类:
for t1&t2 in 62 63 64 65; do
R -q -e "library(pastecs);d <- read.table('ageecent.txt', header = F,sep=' ');
vart1 =var(d[,$t1]); vres_t1=vart1*0.75;
va_t1=(vart1*0.25);vart2=var(d[,$t2]); vres_t2=vart2*0.75;
va_t2=(vart2*0.25); cor=cor(d[,$t1],d[,$t2]);
write.table(va_t1,'va_t1', row.names=F, col.names=F);
write.table(vres_t1,'vres_t1',row.names=F,col.names=F);
write.table(va_t2,'va_t2',row.names=F,col.names=F);
write.table(vres_t2,'vres_t2',row.names=F,col.names=F);
write.table(cor,'cor',row.names=F,col.names=F)"
done
我的测试代码:
@Entity
public class Product {
@Id
@GeneratedValue (strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String description;
private double purchasePrice;
private double retailPrice;
private double quantity;
@ManyToOne
@JoinColumn (name = "supplier_id")
private Supplier supplier;
@ManyToOne
@JoinColumn (name = "category_id")
private Category category;
@Entity
public class Category {
@Id
@GeneratedValue (strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String description;
@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany
@Cascade(org.hibernate.annotations.CascadeType.ALL)
private List<Product> products;
@Entity
public class Supplier {
@Id
@GeneratedValue (strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@LazyCollection(LazyCollectionOption.FALSE)
@Cascade(org.hibernate.annotations.CascadeType.ALL)
@OneToOne
private Contact contact;
@LazyCollection(LazyCollectionOption.FALSE)
@OneToMany
private List<Product> products;
好吧,断言失败了,因为product.category.products和product.supplier.products属性不同,正如你在pic上看到的那样: 一个产品为null,另一个为{PersistentBag}。 当然,我可以通过编写自定义equals方法(它将忽略这些属性)轻松破解它,但确定它不是最好的方法。
那么,为什么这些领域不同? 我确信在实体字段的正确注释中有解决方案。
答案 0 :(得分:1)
两个指针:
@LazyCollection(LazyCollectionOption.FALSE)
,因此当您检索实体时ORM会动态加载带有该注释的字段,而在您的单元测试夹具中创建的entites是在您的ORM之外创建的不重视这些领域。@LazyCollection(LazyCollectionOption.FALSE)
,如果您想要使用检索到的实体和手工创建的实体执行assertEquals(),也可能会有其他差异。例如,对于Hibernate,您的懒惰List
不会是null
,而是PersistentList
的实例。所以,你应该执行一些工作来执行断言 您可以单独检查属性,也可以使用Reflection来断言字段并忽略预期对象中空字段的比较。
检查http://www.unitils.org/tutorial-reflectionassert.html,它可能对您有帮助。