2
的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
你的測試的父類是什麼? –