在编写单元测试用例时,有一点我需要做一些元编程来测试如下方法。

 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"
    }

以下是我运行测试用例所经历的场景:
  • 单独运行测试用例时,它可以完美运行。
  • 在将测试用例作为整个规范运行时,即运行Specification类本身,它可以完美地运行
  • 但是当通过
  • 整体运行测试用例时



    无法说出Class.metaclass.static say can not get static on null
    请帮忙!

    最佳答案

    如果要在测试中进行元类更改,则需要在每个测试结束时的清理步骤中清理这些元类更改。否则,您将面临测试污染的风险。

    setup
        metaclass work
    when
    then
    cleanup:
        revoke the metaclass changes here
    where
    

    09-11 18:39