通过单元/集成测试检测重复的表名

时间:2016-02-24 10:30:04

标签: spring unit-testing jpa spring-data-jpa

现在有几次,由于复制粘贴,我创建了两个具有相同表名的JPA实体。即:

@Table(name = "myfirsttable")
public class MyFirstTable { @Id @Column private Long id; }

@Table(name = "myfirsttable")
public class MySecondTable { @Id @Column private Integer id; }

我正在使用Spring Test,这意味着幸运的是,当我这样做时,至少有一次测试失败了。问题是我看到的失败会抱怨数据类型。例如,在上文中,我会看到HibernateJpaAutoConfiguration.class引发的异常,例如expected int but found bigint myfirsttable。如果我看一下应该是myfirsttable的班级,我会感到困惑(我很容易混淆),思考“但它说它是Long,所以肯定bigint是正确的映射?“我可能需要一段时间来弄清楚为什么我会看到那个特定的信息。同样,堆栈跟踪可能会提到无法找到字段。

到目前为止,只有少数情况我觉得有必要创建两个指向同一个表的不同实体,以便覆盖99%的情况,其中两个实体指向同一个表是一个错误,我想知道是否有一种简单的方法来设置测试,这会以一种方式告诉我,我已经创建了一个重复的表名。我正在考虑将一个测试放入我的所有项目中,这可以给我一个有用的警告来识别这个问题。

1 个答案:

答案 0 :(得分:1)

我可以看到两个选项:

您可以创建一个只会尝试加载ApplicationContext的测试。如果失败了,那就错了。不幸的是,要找出确切的错误,你必须深入研究日志。

另一种选择是编写一个测试,它将查看所​​有使用@Table注释的类,并查看是否有多个具有相同的表名。我在我的一个项目中使用类似的测试来确保没有实体类使用原语。有libriares可以更轻松地扫描具有特定注释的类。