我正在尝试测试在域类上调用方法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
为空)。因此,我知道我需要在域类中模拟此
getUrl()
方法。我们如何模拟此方法进行单元测试?
最佳答案
static
。您无法自动连接静电。如果编写LinkGenerator grailsLinkGenerator
,则必须在瞬变中添加grailsLinkGenerator
。否则,休眠将尝试保存它。您可以通过简单地编写def grailsLinkGenerator
来避免这种情况。 createLink()
方法,称为link()
。 grailsLinkGenerator
:def p = new Person()
p.grailsLinkGenerator = Mock(LinkGenerator)
那么您可以存根/模拟
link()
(不确定要测试的内容,所以这只是一个示例):p.grailsLinkGenerator.link (_) >> "foo"