Операция с использованием вставки внешнего ключа вызывает проблемы на этапе модульного тестирования - PullRequest
0 голосов
/ 05 мая 2009

У меня есть следующая схема:

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;

Пока все хорошо ... и это работает в производственной среде!

Единственная проблема - на этапе модульного тестирования. Я тестирую уровень доступа к данным, и в начале теста база данных будет очищена и заполнена исходными данными. Но проблема в том, что каждый раз, когда повторное заселение будет выполнено, statusid и jobid будут увеличиваться. Так что в модульном тесте больше нельзя вставлять, как раньше, потому что statusid все время меняется.

Я думаю о том, чтобы изменить свой insert statement, чтобы он стал более дружественным к юнит-тестированию ... какие-нибудь идеи?

Редактировать: Это должен быть вопрос, не связанный с базой данных / ORM. Потому что я работаю с SQL-сервером, MYSQL, MS Access и Propel, NHibernate и т. Д. Поэтому я хочу общее решение, которое можно применять к каждому случаю.

Редактировать 2: кажется, вставка значения поля идентификатора не работает. потому что когда вы заполняете таблицу (через ORM), вы не можете указать значение поля идентификатора, по крайней мере, Propel не допустит этого.

1 Ответ

0 голосов
/ 05 мая 2009

Поддерживает ли ваша база данных вставку в поле идентификации? Это наиболее очевидный ответ (для заполнения таблицы состояния известными идентификаторами в модульном тесте).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...