Chr*_*ald 6 grails unit-testing spock
这是我的测试类:
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
}
Run Code Online (Sandbox Code Playgroud)
}
当我运行此测试时,我得到以下内容:
| Failure: valid promo codes - null, null(skillz.PromoServiceSpec)
| Condition not satisfied:
service.isValidPromoCode(user, code) == value
| | | | | |
| false null null | true
skillz.PromoService@20e0e9d5 false
Run Code Online (Sandbox Code Playgroud)
我已经尝试了大量不同的配置和布局,所有这些都让我得到一个空指针异常(对于变量本身)或变量的空值.
在static变量上做所有定义也没有改变任何东西,结果与使用相同@Shared.
我也尝试过嘲笑这些,但是在尝试为类执行.Mock()时总是得到null异常...
谢谢!!
Pet*_*ser 13
我不确定你要在这里实现什么,但是在第一次输入方法之前(其余部分)对where块进行评估,那时你的共享变量为null.您必须提前设置它们,例如在(非)方法中.setupSpecsetup
| 归档时间: |
|
| 查看次数: |
2668 次 |
| 最近记录: |