0

В настоящее время мы реализуем наше уникальное ограничение путем выполнения SQL непосредственно в методе SeedEF Code First, Unique контрсилы и тестирование

context.Database.ExecuteSqlCommand(
    "BEGIN TRY ALTER TABLE MyTable ADD CONSTRAINT UC_CODE UNIQUE (COL1, COL2, COL3) END TRY BEGIN CATCH END CATCH"); 

Однако, сейчас я не могу писать тесты правильно для этого.

Я высмеиваю репозиторий и вставляю одну и ту же запись дважды, но ... конечно, не возникает ошибка, потому что база данных на самом деле не вызвана (а ее не должно быть), но тогда как мне написать тест, который гарантирует, что ошибка будет вставлена ​​при вставке дублирующей записи?

+2

Почему бы вам не указать ваш тест в базе данных тестов? – cameronjchurch

+0

@cameronjchurch, потому что это медленно, и взломано. – CaffGeek

ответ

0

В модульном тесте необходимо настроить код, который вы хотите проверить. Вы хотите проверить реакцию EF + DB на нарушения ограничений. Итак, вам нужно запустить тесты в реальной (тестовой) базе данных, которую вы можете создать в начале теста.

0

Я издеваться репозиторием, и вставить ту же запись дважды, но ... из конечно, ошибка не генерируется, так как база данных не на самом деле называется (и это не должно быть), но то как мне написать тест, который обеспечивает ошибку , когда вставлена ​​дублирующаяся запись?

Вы неправильно поняли точку зрения насмешек и фальсификаций. Подделанный репозиторий не должен делать никакой логики. Если вы проверите, как ваш код реагирует на нарушение уникального ограничения, вы просто настроите свой макет, чтобы выбросить ожидаемое исключение.

+0

Я не пытаюсь проверить, как я на это реагирую, я пытаюсь проверить, что это происходит, когда это нужно. – CaffGeek

+0

В таком случае вы не можете издеваться над этим - вы должны протестировать его против реальной базы данных, потому что это источник логики. –

+0

Так что лучший способ сделать это, я не хочу использовать REAL db, я хотел бы что-то поднять и использовать EF для создания db, специфичного для тестирования. Это удаляется, когда тесты выполняются. – CaffGeek

Смежные вопросы