[英]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.