2009-05-05 65 views
0

ユニットテスト段階中に問題が発生します。操作は、私は次のスキーマを持っている

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:IDフィールド値の挿入が機能していないようです。なぜなら、(ORMを介して)テーブルにデータを入力するときに、少なくともPropelはそれを許可しないで、IDフィールド値を指定することができないからです。

答えて

0

データベースでIDフィールドへの挿入がサポートされていますか?それは最も明白な答えです(単体テストで既知のIDをステータステーブルに取り込む)。

+0

私のシナリオでは、IDフィールドに挿入することはできません。例えば、propelでは、テーブルに値を設定するときにIDフィールドの値を指定することはできません。 – Graviton

関連する問題