2016-09-07 5 views
0

저는 Grails의 세계에서 실제로 새로운 것 같습니다. 일부 제약이있는 도메인 클래스에 대한 테스트 사례를 작성하려고합니다. 내 단위 테스트를 실행하려고 할 때 내 개체에 널 포인터 예외가 발생합니다. 디버깅에서 객체가 Null로 설정되도록하는 내 toString 메서드를 사용하여 문제가 있음을 알게되었습니다. 어떻게해야합니까? 어떤 도움을 주셔서 감사합니다. 사전에도메인 클래스 (테스트 제약)에 대한 단위 테스트 케이스 - Grails

import grails.test.mixin.TestFor 
import spock.lang.Unroll 
import spock.lang.Specification 
@TestFor(OrderCharge) 
//@TestMixin(GroovyPageUnitTestMixin) 

class ChargeSpec extends Specification { 

    def setup() { 
     mockForConstraintsTests(
      OrderCharge, [ 
       new OrderCharge(order: Mock(SalesOrder), 
        miscOrderCharges: Mock(MiscOrderCharges), 
        quantity: 1.0, 
        price:20.0 
         /*, sapInvoice: Mock(SapInvoiceRecord) */ 
       ) 
      ] 
     ) 
    } 

    void validateConstraints(obj, field, error) { 
     def validated = obj.validate() 
     if (error && error != 'valid') { 
      assert !validated 
      assert obj.errors[field] 
      assert error == obj.errors[field] 
     } else { 
      assert !obj.errors[field] 
     } 
    } 

    @Unroll("test inventory all constraints #field is #error") 
    def "test Charge all constraints"() { 
     given: 
     def obj = new OrderCharge("$field": val) 

     expect: 
     validateConstraints(obj, field, error) 

     where: 
     error    |field     |val 
     'nullable'   |'orderCharge'   |null 
     'nullable'   |'sapInvoice'   |null 
     'min'    |'quantity'   |-1 
     'min'    |'price'    |0 
    } 
} 

감사 :

@MultiTenant 

class OrderCharge { 
    static scaffold = [ 
     exclude: ['tenantId'], 
    ] 

    static belongsTo = [ 
     order: SalesOrder 
    ] 

    MiscOrderCharges miscOrderCharges 
    Date lastUpdated 
    double quantity 
    double price 
    SapInvoiceRecord sapInvoice 

    static constraints = { 
     order(nullable: true) 
     quantity(min:1d) 
     miscOrderCharges() 
     sapInvoice(nullable: true) 
    } 

    String toString(){ 
     def pattern = "\$##,###.00" 
     def currency = new DecimalFormat(pattern) 
     String rate = currency.format(miscOrderCharges.price) 
     return "$miscOrderCharges x$quantity" 
    } 
} 

가 여기 내 단위 테스트 케이스이다 :

여기에 내 도메인 클래스입니다.

답변

0

나에게 떠오르는 유일한 점은 toString()에서 반환 한 것입니다.

return "$miscOrderCharges x$quantity" 

gString을 사용하고 있습니다. 표현식의 형식이 $ {expression} 인 반면, 개별 변수는 $ somevariable 형식의 간단한 $ 표기법을 사용하여 참조 할 수 있습니다.

명세서에 x 수량은 오타처럼 보입니다. 그것들을 다음과 같은 식으로 곱하는 것을 의미합니까?

return "${miscOrderCharges * quantity}" 

자세한 내용은 http://groovy.jmiguel.eu/groovy.codehaus.org/Strings+and+GString.html을 참조하십시오.

+0

예, 곱해질 필요가 있습니다. 곱셈에 astrisk (*)를 사용했지만 여전히 통과 할 수 없습니다. 그래도 답장을 보내 주셔서 감사합니다. 고맙습니다. – Shabih