Grails 2.3.4Grails shouldFail странное поведение
Учитывая следующий класс домена:
class Player {
String name
static constraints = {
name nullable: false, size: 2..30, unique: true
}
}
Запуск следующие испытания блока производят какое-то странное поведение.
Тестирование с использованием shouldFail() результат
@Test
void nameUniqueContraint() {
Player player = new Player(name: "John")
Player player2 = new Player(name: player.name)
assert(player.save())
shouldFail(ValidationException) {
player2.save(failOnError: true, flush: true)
fail "FAIL ME"
}
}
Тест:
grails.validation.ValidationException: Validation error occurred during call to save():
- Field error in object 'moonillusions.sulis.domain.Player' on field 'name': rejected value [John]
Тестирование с использованием shouldFail() и поймать
@Test
void nameUniqueContraint1() {
Player player = new Player(name: "John")
Player player2 = new Player(name: player.name)
assert(player.save())
shouldFail(ValidationException) {
try {
player2.save(failOnError: true, flush: true)
fail "FAIL ME"
}catch(ValidationException e) {
fail "CATCHED "
}
}
}
Результат теста:
junit.framework.AssertionFailedError: CATCHED
Тестирование настраивайте
@Test
void nameUniqueContraint2() {
Player player = new Player(name: "John")
Player player2 = new Player(name: player.name)
assert(player.save())
try {
player2.save(failOnError: true, flush: true)
fail "FAIL ME"
}catch(ValidationException e) {
fail "CATCHED "
}
}
результат теста:
junit.framework.AssertionFailedError: FAIL ME
Для меня эти результаты не имеют никакого смысла. shouldFail(), кажется, не ведет нас к ожидаемому (тест 1), а также влияет на блок try (тест 2) внутри кода.
Я испытываю подобную вещь на 2.3.5. Кажется, что shouldFail запускает код, предоставленный после завершения без исключения. Что приводит к простому исключению первоначального исключения без какой-либо специальной обработки. Вы нашли решение для этого? – amit
Что такое родительский класс вашего теста? –