Это немного драконовски, но я обычно стремлюсь стереть базу данных (или только интересующие меня таблицы) перед каждым выполнением метода тестирования. Конечно, это не работает, когда я перехожу к более интеграционным тестам.
В тех случаях, когда у меня нет контроля над базой данных, скажем, я хочу убедиться, что после заданного вызова было создано правильное количество строк, тогда тест подсчитает количество строк до и после проверенного вызова и убедится разница правильная. Другими словами, примите во внимание существующие данные, а затем посмотрите, как тестируемый код изменил ситуацию, не предполагая ничего о существующих данных. Настройка может быть немного трудной, но давайте проверим более «живую» систему.
В вашем случае важны конкретные идентификаторы? Не могли бы вы сгенерировать идентификаторы на лету, возможно, случайно, проверить, что они еще не используются, а затем продолжить?