在编写单元测试用例时,有一点我需要做一些元编程来测试如下方法。
void "test method:resolver"(){
setup:"mocked resolver"
ContextHolder.getMetaClass().static.getBean = {
Resolver resolver = Mock(Resolver)
resolver(_) >> {HttpServletRequest request1->
return 1;
}
}
and:"mocked getAppName"
CoreUtil.metaClass.static.getAppName = {
return "$apiName"
}
when:
UserGroupRole userGroupRole = service.resolve(username)
then:
userGroupRole != null
where:
apiName || username
"core-blog" || "test11"
}
以下是我运行测试用例所经历的场景:
无法说出
Class.metaclass.static say can not get static on null
请帮忙!
最佳答案
如果要在测试中进行元类更改,则需要在每个测试结束时的清理步骤中清理这些元类更改。否则,您将面临测试污染的风险。
setup
metaclass work
when
then
cleanup:
revoke the metaclass changes here
where