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()
これでも同じエラーメッセージがスローされます。
誰でもアイデアを持っていると非常に役立ちます。
ありがとうアルナジェンドラ