2016-09-07 5 views
0

私はGrailsの世界では実際に新しいです。私はいくつかの制約があるドメインクラスのテストケースを記述しようとしています。私は私のユニットテストを実行しようとしているときに私のオブジェクトにNULLポインターの例外が表示されます。デバッグでは、オブジェクトを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" 

gStringsを使用しています。 $ somevariableのように、単純な$表記を使って個々の変数を参照することができますが、式は$ {expression}の形式になっています。

x $ quantityは、誤字のようです。それらを次のような表現として掛けることを意味しましたか?

return "${miscOrderCharges * quantity}" 

詳しくはhttp://groovy.jmiguel.eu/groovy.codehaus.org/Strings+and+GString.htmlを参照してください。

+0

ええ、それらは乗算する必要があり、私は乗算のためにastrisk(*)を使用しましたが、まだそれを渡すことができません。あなたの返信をありがとう。感謝します 。 – Shabih

関連する問題