Как имитировать исключение при обновлении, чтобы проверить управление транзакциями Spring?

У меня есть под той же транзакцией spring массив обновлений, как показано ниже:

someRepositoryA.updateEntityA(...)
someRepositoryB.updateEntityB(...)
someRepositoryC.updateEntityC(...)

Как я могу смоделировать, что someRepositoryB.updateEntityB(...) выдает Exception? Это позволит мне увидеть, что изменения, внесенные А, были отменены. Поскольку я буду тестировать транзакцию, я не могу имитировать репозиторий, но я буду использовать некоторую базу данных в памяти.


person Roxana    schedule 10.06.2014    source источник
comment
это не было бы модульным тестированием, не так ли?   -  person Roxana    schedule 10.06.2014
comment
А я не обратил внимания на теги :)   -  person JonK    schedule 10.06.2014


Ответы (1)


Я бы не стал имитировать исключение, я бы сделал что-то действительно не так.

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

Самый простой способ проверить вашу транзакцию — создать тест B с данными, выбранными таким образом, чтобы обновление привело к нарушению ограничения ссылочной целостности (есть ли у вас какие-либо ненулевые ограничения? В противном случае вы можете ввести недопустимый первичный ключ). значение, повторно используя существующее значение). Нарушение RI вызовет исключение.

person Nathan Hughes    schedule 10.06.2014