unit-testing – 使用服务和插件依赖项测试自定义Grails Taglib
我有一个自定义taglib需要调用服务方法,而该方法又使用
Wslite plugin来发送和接收SOAP消息. taglib看起来像这样.
class myTagLib { def myService def thisTag = { def parametersFromService = myService.method("argument") out << render(template:'/myFolder/myView',model:parametersFromService) } } 我正在尝试为这个taglib构建一个测试.我的测试是这样的: void testThisTag() { def appliedTagLib = applyTemplate('<thisTag attr="value" />') def parametersFromService = myService.method("argument") def renderedTemplate = render(template:'/myFolder/myView',model:parametersFromService) assertEquals appliedTagLib,renderedTemplate } 我开始把它写成单元测试.我尝试了简单的MockFor(MyService)注释,以及mocking them in a more elaborate fashion,但是当taglib尝试调用它时,myService对象始终为null. 鉴于此,我决定最好将其作为集成测试;这将让我访问插件和服务,没有问题. 但是,只有在测试类扩展GroovyPagesTestCase时,applyTemplate方法才有效.如果你这样做,渲染方法不起作用,至少不在集成测试中.我知道applyTemplate和render在taglib的单元测试中并排相互协作,因为我已经通过这种方式测试了其他taglib. 我好像在一块岩石和一块坚硬的地方之间.要访问他们调用的服务,插件和SOAP服务,我需要进行集成测试.要使用applyTemplate()方法,我需要扩展GroovyPagesTestCase,但这会破坏render方法.我已经尝试将import grails.test.GroovyPagesTestCase添加到我的测试类中,然后从中调用applyTemplate方法,但这会导致缺少方法异常. 思考? Grails版本是2.0.1,但如果有帮助(我们的网站处于转换状态),我可以升级到2.2.1. – -附录 – – – import org.codehaus.groovy.grails.web.pages.GroovyPagesTemplateEngine import grails.gsp.PageRenderer … def pageRenderer … void setUp() { context = grailsApplication.mainContext taglib = context.getBean(myTagLib.class.name) pageRenderer = new PageRenderer(new GroovyPagesTemplateEngine(context.getServletContext())) } 但收到此错误: java.lang.NullPointerException: Cannot invoke method findTemplateByPath() on null object at grails.gsp.PageRenderer.renderViewToWriter(PageRenderer.groovy:120) at grails.gsp.PageRenderer.render(PageRenderer.groovy:77) at MyTagLibIntegrationTests.testThisTag(MyTagLibIntegrationTests.groovy:37) 解决方法
我几天前在类似的东西上挣扎,这就是我解决它的方法:
>将测试保持在集成测试中(不需要扩展任何内容) 就是这样! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |