Grails는 다음과 같은 도메인 클래스 감안할 때Grails는 단위 테스트가 이상한 행동을
2.3.4 shouldFail. 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 "
}
}
}
시험 결과 :
,174,515 캐치에게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
테스트의 상위 클래스는 무엇입니까? –