涉及外键插入的操作在单元测试阶段导致问题

时间:2009-05-05 01:38:09

标签: unit-testing orm

我有以下架构:

create table statuslookup
{
  statusid int primary key,
  statusname string unique,
  description string
}

create table job
{
  jobid int primary key,
  jobname string unique,
  status_id foreign key reference statuslookup(statusid)
}

statuslookup当然会在架构设置期间预先填充,以便稍后当我们在表job中创建一个条目时,我们可以引用它并且不会出现外键错误。要在表job中添加条目,我们只需使用简单的insert command

job = new job();
job.jobname="mytest";
job.status_id=2;

到目前为止一直很好..它在生产环境中有效!

唯一的问题是在单元测试阶段。我测试了数据访问层,在测试开始时,数据库将被清除并重新填充初始数据。但问题是每次重新填充时,statusidjobid都会增加。因此,在单元测试中,不能像以前那样插入,因为statusid一直在变化。

我正在考虑更改我的insert statement,以便它更适合单元测试...任何想法?

编辑:这应该是数据库/ ORM不可知的问题。因为我使用SQL服务器,MYSQL,MS Access和Propel,NHibernate等。所以我想要适用于每种情况的通用解决方案。

编辑2:插入标识字段值似乎不起作用。因为当你填充表格(通过ORM)时,你不能指定身份字段值,至少Propel不允许这样做。

1 个答案:

答案 0 :(得分:0)

您的数据库是否支持插入标识字段?这是最明显的答案(在单元测试中用已知ID填充状态表)。