2014-01-15 5 views
5

Hier ist mein Test-Klasse:SPOCK - Alle @Shared Variablen sind NULL

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 
} 

}

Wenn ich diesen Test ausführen, bekomme ich die folgende:

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

service.isValidPromoCode(user, code) == value 
|  |    |  |  | | 
|  false   null null | true 
[email protected]   false 

Ich habe versucht, Eine Menge verschiedener Konfigurationen und Layouts, die mir entweder eine Null-Zeiger-Ausnahme (für die Variable selbst) oder einen Null-Wert für die Variable liefern.

Alle Definitionen unter static Variablen haben auch nichts geändert, das gleiche Ergebnis wie mit @Shared.

Ich habe versucht, diese auch spöttisch, aber ich habe immer null Ausnahmen beim Versuch .Mock() für die Klasse ...

Dank ausführen !!

+0

Haben Sie auch '@Shared def testUser' probiert? Mit 'def'. – dmahapatro

+0

Ja, keine Liebe macht das. – ChronaldMcDonald

Antwort

11

Ich bin mir nicht ganz sicher, was Sie hier zu erreichen versuchen, aber der where Block ausgewertet vor (den Rest) die Methode zuerst eingegeben wird, und zu diesem Zeitpunkt sind Ihre gemeinsamen Variablen null. Sie müssten sie früher einstellen, z. in einer setupSpec (nicht setup) Methode.

+0

-edit- hat es funktioniert! VIELEN DANK! – ChronaldMcDonald