【问题标题】:Parametrized Spock test using @WithMockUser使用 @WithMockUser 的参数化 Spock 测试
【发布时间】:2021-07-30 07:04:48
【问题描述】:

我想在 Spock 中使用 @WithMockUser 运行参数化测试,每次迭代都有不同的角色。

作为示例,以下测试代码显示没有编译错误并且运行了两次。 但是结果失败了,因为#role 只在@Unroll 中被解析,而不是在@WithMockUser 注解中。

    @Unroll("#role is authorized to get admin")
    @WithMockUser(username = "user", roles = ["#role"])
    def "User is authorized to get admin"() {
        when:
        def adminDto = adminController.getAdmin()

        then:
        adminDto.getStatusCode() == HttpStatus.OK

        where:
        role << ["USER", "ADMIN"]
    }

所以我的问题是:是否可以将这样的测试作为参数化测试运行?

提前谢谢你!

注意:我知道注释可能如下所示:

@WithMockUser(username = "user", roles = ["USER", "ADMIN"])

但这将是一种不同的行为 - 一个呼叫同时具有两个角色。

【问题讨论】:

    标签: unit-testing groovy annotations spock


    【解决方案1】:

    简答否。

    注解是在编译时静态编译的,Spock 不能修改,迭代是在运行时动态生成/评估的。 @Unroll 注解对数据变量有一些特殊的支持以使其工作,而 Spring 注解对 Spock 一无所知。

    您可以查看WithMockUserSecurityContextFactory 并使用它手动设置given 块中的SecurityContext

    【讨论】:

      猜你喜欢
      • 2013-11-27
      • 1970-01-01
      • 1970-01-01
      • 2020-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-14
      • 1970-01-01
      相关资源
      最近更新 更多