如何在Grails控制器单元测试用例中注入TagLib MockObjects?

时间:2012-12-10 12:04:08

标签: unit-testing grails taglib

i have tagLib like this:

静态命名空间=' j2'

  def brandMessage = { attrs, body ->   
    def brand = ConfigurationHolder.config.j2.brand
    def messageCode = (brand ? brand+".":"") + attrs.code    
    def defaultCode = attrs.default ?: attrs.code
    out << message(code:messageCode,      default:message(code:attrs.code,default:defaultCode))
  }

并使用:

public static def translate = {code,Object[] args->
      def dflt = (args.size()>0?args[0]:"");
        def taglib = ApplicationHolder.application?.getMainContext()?.getBean("com.j2.taglib.BrandMessageTagLib")
        def translatedValue = taglib?.brandMessage(code:code,default:dflt)?:""

        return translatedValue
      }
在我们正在使用的控制器中

flash.message = I18nUtils.translate('admin.groups.delete.success')

在运行应用程序时工作正常。但是当我们为控制器创建单元测试用例时,它会抛出如下错误消息:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'com.j2.taglib.BrandMessageTagLib' is defined

但是我在Test类中定义了这个:

defineBeans {
                myService(BrandMessageTagLib)
            }
            def beanName=applicationContext.getBean("myService")

            log.info("beanName->"+beanName)

            def mockMyTagLib = mockFor(BrandMessageTagLib)
            mockMyTagLib.demand.brandMessage(1) {code, defaultMessage ->
                def defCode = new MarkupBuilder(new StringWriter())
                defCode.applyTemplate('<j2:brandMessage code="admin.groups.delete.success"')
            }
            controller.brandMessageTagLib = mockMyTagLib.createMock()

即使这也是同样的错误消息。

任何人都有想法是有益的。

由于 arnagendla

0 个答案:

没有答案