gpt4 book ai didi

unit-testing - 在 JSON 内容类型的 grails 单元测试(和一般情况下)中使用自定义渲染器

转载 作者:行者123 更新时间:2023-12-02 14:43:47 24 4
gpt4 key购买 nike

我正在尝试为在我的 REST api 中工作的异常获取自定义 JSON 渲染器。

我能够让一个自定义编码器工作,它可以完成我需要的大部分工作,但我想控制我在编码器中无法访问的上下文。 grails 文档展示了如何编写自定义渲染器,我有一个我认为应该可以工作的渲染器,但是在对我的 REST Controller 进行单元测试时无法使用它。

Grails 文档:http://grails.org/doc/2.3.4/guide/webServices.html#customRenderers

有谁知道我将如何初始化此渲染器以在单元测试期间用于我的 Controller 操作?

上面的文档只说明了如何在 resources.groovy 文件中进行设置。

当我使用编码器时,我能够做到:

def setup(){
//Set up the custom JSON marshallers
JSON.registerObjectMarshaller(new CusomMarshaller(), 1)
}

但我没有看到渲染器的等效方法。谁能指出我正确的方向?

更多细节:

这是我的渲染器:
class JSONExceptionRenderer extends AbstractRenderer<Exception>{

JSONExceptionRenderer(){
super(Exception, [MimeType.JSON, MimeType.HAL_JSON, MimeType.TEXT_JSON] as MimeType[])
}

@Override
void render(Exception object, RenderContext context) {
log.warn("RENDERING")
Exception exception = (Exception) object

//Default to internal error
Integer code = 500

//If it is a defined exception with a more appropriate error code, then set it
if(exception instanceof RestException){
code = (Integer) ((RestException) exception).getCode()
}else if(exception instanceof MissingResourceException){
code = 404
}
context.status = HttpStatus.valueOf(code)

//Write the JSON
Writer writer = context.getWriter()
Map content = ["code":code, "status":"error", "message":exception.message]
JsonBuilder builder = new JsonBuilder(content)
builder.writeTo(writer)

}
}

这就是我试图让它工作的方式:
try{
log.info "Throwing exception"
throw new NullPointerException("Test Exception")
}catch(Exception ex){
render ex as JSON
}

谢谢!

最佳答案

如果你使用spock,可以直接在Specification中注入(inject)bean .

@TestFor(MyController)
class MyControllerSpec extends spock.lang.Specification {
def myCustomRenderer //bean name used in resources.groovy

//continue with tests
}

如果你正在使用junit测试,那么你可以使用 defineBeans作为:
@TestFor(MyController)
class MyControllerTests {
void setup() {
defineBeans {
myCustomRenderer(com.example.MyCustomRenderer)
}
}

//continue with tests
}

您可以引用 this answer以及使用defineBeans。

我相信这是您测试渲染器行为所需要做的。

关于unit-testing - 在 JSON 内容类型的 grails 单元测试(和一般情况下)中使用自定义渲染器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21996568/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com