【问题标题】:SPOCK - All @Shared Variables are NULLSPOCK - 所有@Shared 变量都是NULL
【发布时间】:2014-01-15 22:01:03
【问题描述】:

这是我的测试类:

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

我尝试了很多不同的配置和布局,所有这些要么让我得到一个空指针异常(指向变量本身),要么得到一个变量的空值。

static 变量处进行所有定义也没有改变任何东西,结果与使用@Shared 相同。

我也尝试过模拟这些,但在尝试为类执行 .Mock() 时总是得到空异常...

谢谢!!

【问题讨论】:

  • 你也试过@Shared def testUser吗?使用def
  • 是的,不喜欢那样做。

标签: unit-testing grails spock


【解决方案1】:

我不完全确定您在这里要达到什么目的,但 where 块在第一次输入方法之前评估(其余部分),那时,您的共享变量为空。您必须更早地设置它们,例如在setupSpec(不是setup)方法中。

【讨论】:

    猜你喜欢
    • 2020-03-04
    • 2021-12-11
    • 2018-08-24
    • 2020-10-21
    • 2010-12-18
    • 1970-01-01
    • 2013-03-30
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多