我正在尝试测试在域类上调用方法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()
  • 单元测试中的
  • 没有 Autowiring bean。您必须使用以下内容自行设置grailsLinkGenerator:
    def p = new Person()
    p.grailsLinkGenerator = Mock(LinkGenerator)
    

    那么您可以存根/模拟link()(不确定要测试的内容,所以这只是一个示例):
    p.grailsLinkGenerator.link (_) >> "foo"
    
  • 09-28 14:03