簡體   English   中英

如何模擬Grails Domain類的特定方法?

[英]How to mock a specific method of Grails Domain class?

我正在嘗試測試在我的域類上調用方法getUrl()的服務:

服務類:

PersonService {

  //WE WANT TO TEST THIS METHOD. 
  String getPersonLink(Person person){
     person.url
  }
}

class Person {

   static transient LinkGenerator grailsLinkGenerator

   String name 
   String uniqueId

   static transients = ['url']

   String getUrl() {
     grailsLinkGenerator.createLink(controller:'xyz', action: 'index', id: uniqueId)
   }
}

我運行測試時得到NullPointerException (它將grailsLinkGenerator視為null)。

所以,我知道我需要在我的域類中模擬這個getUrl()方法。

我們如何模擬這個方法調用我的單元測試?

  • 你必須刪除static 你無法自動裝配靜電。 如果您編寫LinkGenerator grailsLinkGenerator ,則必須將grailsLinkGenerator添加到瞬態。 否則hibernate會嘗試保存它。 您可以通過編寫def grailsLinkGenerator來避免這種def grailsLinkGenerator

  • 沒有createLink()方法,它叫做link()

  • 在單元測試中,bean沒有自動裝配。 你必須自己設置grailsLinkGenerator ,如下所示:

     def p = new Person() p.grailsLinkGenerator = Mock(LinkGenerator) 

    然后你可以存根/模擬link() (不確定你要測試什么,所以這只是一個例子):

     p.grailsLinkGenerator.link (_) >> "foo" 

暫無
暫無

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

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