簡體   English   中英

了解Grails模擬

[英]Understanding Grails mockFor demand

我正在嘗試為我的過濾器編寫一個單元測試,並且正在努力了解對模擬對象的需求 這是一個簡單的失敗測試:

void "test my sanity"() {
    setup:
    def vendorPayment = mockFor(Payment)
    vendorPayment.demand.buyerId { -> 123}

    def vp = vendorPayment.createMock()
    //vp.buyerId=123
    println "buyer id: ${vp.buyerId}"

    when:
      def a = "testing"

    then:
      vp.buyerId == 123
}

我想模擬BuyerId的吸氣劑。 使用需求不起作用,但是如果我創建了模擬然后設置了買方ID(帶注釋的行),則測試將通過。 需求不適用於吸氣劑嗎? 是因為吸氣劑是隱式/動態創建的嗎?

方法getBuyerId必須被getBuyerId Groovy在編譯時為您添加了訪問器方法,因此必須模擬按需方法。 舉一個簡單的例子:

class Payment {
    Integer buyerId
}

在編譯后將類轉換為字節碼時,將添加Payment.groovy Getter / Setter。 相應的測試如下所示:

void "test my power"() {
    setup:
        def vendorPayment = mockFor(Payment)
        vendorPayment.demand.getBuyerId(1..2) { -> 123}

        def vp = vendorPayment.createMock()
        println "buyer id: ${vp.buyerId}"

    expect:
        vp.buyerId == 123

        //This would fail for < 2.3.* because of this bug which is fixed in 2.4
        //http://jira.grails.org/browse/GRAILS-11075
        vendorPayment.verify() //null

}

請注意所做的更改:

  • getBuyerId方法,而不是字段buyerId
  • 測試要求將getBuyerId調用1至2次(第一次在打印時,第二次在塊中)。 默認情況下,如果未指定任何內容,則假定該方法將被調用一次,在這種情況下將失敗,因為兩次調用getBuyerId
  • 我們還可以在測試完成后驗證模擬控件是否已完成工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM