2009-05-05 6 views
0

je le schéma suivant:L'opération impliquant l'insertion de clé étrangère provoque des problèmes lors de tests unitaires étape

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) 
} 

Le tableau statuslookup sera, bien sûr, être prérempli lors de la configuration du schéma afin que plus tard nous lorsque nous créons une entrée Dans la table job, nous pouvons nous y référer et ne pas avoir d'erreur de clé étrangère. Pour ajouter une entrée dans le tableau job, il suffit d'utiliser un insert command simple:

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

Jusqu'à présent, si bon .. et il fonctionne dans un environnement de production!

Le seul problème est lors de l'étape de test unitaire. Je teste la couche d'accès aux données et au début du test, la base de données sera effacée et repeuplée avec les données initiales. Mais le problème est que chaque fois que le repeuplement est fait, les statusid et jobid seront incrémentés. Donc dans le test unitaire on ne peut plus insérer comme avant, parce que le statusid change tout le temps.

Je pense à changer mon insert statement afin qu'il soit plus respectueux de tests unitaires .. des idées?

Edit: Cela devrait être une base de données/ORM question agnostique. Parce que je travaille avec le serveur SQL, MYSQL, MS Access et Propel, NHibernate etc. Donc je veux une solution générale qui peut être appliquée à chaque cas.

Édition 2: L'insertion de la valeur du champ d'identité ne semble pas fonctionner. car lorsque vous remplissez une table (via ORM), vous ne pouvez pas spécifier la valeur du champ d'identité, au moins Propel ne l'autorisera pas.

Répondre

0

Votre base de données prend-elle en charge l'insertion dans le champ d'identité? C'est la réponse la plus évidente (pour remplir la table d'état avec des identifiants connus dans le test unitaire).

+0

Dans mon scénario, je ne peux pas faire d'insertion dans le champ d'identité. Prenez par exemple, dans propel, lorsque vous remplissez une table, vous ne pouvez pas spécifier la valeur du champ d'identité. – Graviton