gpt4 book ai didi

unit-testing - Grails单元测试应该失败奇怪的行为

转载 作者:行者123 更新时间:2023-12-02 14:12:12 25 4
gpt4 key购买 nike

Grails 2.3.4

给定以下域类:

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()和catch进行测试
@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



使用catch进行测试
@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)。

最佳答案

此行为某种程度上与示例中第一个“玩家”的刷新有关。当第二名玩家被冲洗时,第一名玩家的冲洗可能正在发生。因此,据我所知,它将导致两个验证异常发生。

解决方案是在测试开始时冲洗第一位玩家。

@Test
void nameUniqueContraint() {
Player player = new Player(name: "John")
Player player2 = new Player(name: player.name)
assert(player.save(failOnError: true, flush: true))
shouldFail(ValidationException) {
player2.save(failOnError: true, flush: true)
}
}

关于unit-testing - Grails单元测试应该失败奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20446092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com