我试图在我的域类上测试调用方法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()
方法。
我们如何模拟这个方法调用我的单元测试?
答案 0 :(得分:3)
您必须删除static
。您无法自动静电。如果您写LinkGenerator grailsLinkGenerator
,则必须将grailsLinkGenerator
添加到瞬变中。否则hibernate会尝试保存它。只需编写def grailsLinkGenerator
即可避免这种情况。
没有createLink()
方法,称为link()
。
在单元测试中,bean没有自动装配。您必须使用以下内容设置grailsLinkGenerator
:
def p = new Person()
p.grailsLinkGenerator = Mock(LinkGenerator)
然后你可以存根/模拟link()
(不确定你要测试什么,所以这只是一个例子):
p.grailsLinkGenerator.link (_) >> "foo"