SPOCK - 所有@Shared变量均为空。

9

这是我的测试类:

import grails.test.mixin.*
import spock.lang.Specification
import spock.lang.Unroll
import spock.lang.*
import groovy.util.logging.Slf4j

@Slf4j
@Mock([PromoRule, PromoCode, SecUser])
@TestFor(PromoService)
class PromoServiceSpec extends Specification {

@Shared testUser
@Shared testCode
@Shared testRule

def setup() {

}

@Unroll
def 'valid promo codes - #user, #code'() {
    given:
    testRule = new PromoRule(
            name : "ZTEST",
            receiverAmount : 5,
            receiverAmountType : PromoRule.AmountType.DOLLARS,
            senderAmount : 0,
            senderAmountType : PromoRule.AmountType.DOLLARS,
            receiverPointsAmount : null,
            receiverPointsAmountType : null,
            receiverMaxUse : null,
    )
    testRule.save(flush:true, failOnError:true)

    testUser = new SecUser(
            id: 1,
            version: 0,
            accountExpired: false,
            accountLocked: false,
            age: 9000,
            balance: 100,
            dateCreated: new Date(),
            emailVerified: true,
            enabled: true,
            firstName: 'Sir',
            lastName: 'Buttocks',
            lastUpdated: new Date(),
            lockedBalance: 0,
            username: "1",
            staff: false,
            displayName: 'sir_buttocks',
            usernameChosen: true,
            depositMade: true,
            depositOfferRecentlySeen: false,
            pin: null
    )
    testUser.save(flush: true, failOnError: true)

    testCode = new PromoCode(
            rule : testRule,
            code : "3",
            senderId : 1,
    )
    testCode.save(flush:true, failOnError:true)

    expect:
    service.isValidPromoCode(user, code) == value

    where:
    user | code || value
    testUser | testCode || true
}

当我运行这个测试时,我得到以下结果:

| Failure:  valid promo codes - null, null(skillz.PromoServiceSpec)
|  Condition not satisfied:

service.isValidPromoCode(user, code) == value
|       |                |     |     |  |
|       false            null  null  |  true
skillz.PromoService@20e0e9d5         false

我尝试了很多不同的配置和布局,但它们都会导致空指针异常(指向变量本身)或变量的空值。
在静态变量上进行所有定义也没有改变任何东西,与使用@Shared相同的结果。
我也尝试过模拟这些,但是当尝试执行类的.Mock()时,我总是会得到空异常。
谢谢!

你也试过使用 @Shared def testUser 吗?使用 def - dmahapatro
不,没有喜欢做那个的。 - ChronaldMcDonald
1个回答

16

我不确定你在这里试图实现什么,但是 where 块会在方法的其余部分首次进入之前进行评估,并且此时,您的共享变量为 null。您需要更早地设置它们,例如在 setupSpec(而不是 setup)方法中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接