Spring Boot 1.4、Spock 和 application.properties

2024-01-22

我正在尝试使用 Spock 为我的 Spring Boot 1.4.0 编写一些测试,但我的 application-test-properties 文件没有被拾取。

我的 gradle 中有这个:

dependencies {

    compile('org.springframework.boot:spring-boot-starter-data-jpa')
    compile('org.springframework.boot:spring-boot-starter-security')
    compile('org.springframework.boot:spring-boot-starter-web')
    compile 'org.codehaus.groovy:groovy-all:2.4.1'    
    testCompile('org.springframework.boot:spring-boot-starter-test')
    testCompile('org.spockframework:spock-spring:1.0-groovy-2.4') {
}

然后我有这个

/src/test/groovy/资源:

# JWT Key
jwt.key=MyKy@99

最后是我的 Spock 测试:

@SpringBootTest(classes = MyApplication.class, webEnvironment=SpringBootTest.WebEnvironment.RANDOM_PORT)
@TestPropertySource("application-test.properties")
public class TokenUtilityTest extends Specification {

    @Autowired
    private TokenUtility tokenUtility

    def "test a valid token creation"() {
        def userDetails = new User(username: "test", password: "password", accountNonExpired: true, accountNonLocked: true,
        );

        when:
        def token = tokenUtility.buildToken(userDetails)

        then:
        token != null
    }
}

哪个正在测试这个类:

@Component
public class TokenUtility {

    private static final Logger LOG = LoggerFactory.getLogger( TokenUtility.class );

    @Value("${jwt.key}")
    private String jwtKey;

    public String buildToken(UserDetails user) {
        return Jwts.builder()
                        .setSubject(user.getUsername())
                        .signWith(SignatureAlgorithm.HS512, jwtKey)
                        .compact();
    }

    public boolean validate(String token) {
        try {

            Jwts.parser().setSigningKey(jwtKey).parseClaimsJws(token);
            return true;

        } catch (SignatureException e) {
            LOG.error("Invalid JWT found: " + token);
        }
        return false;
    }
}

我最初在测试中实例化了 TokenUtility,但 application-test.properties 从未加载(我假设从那时起jwtKey为空)。所以我正在尝试 @Autowired 我的类正在测试,但现在它是空的。

看起来 Spring Boot 1.4 在测试方面做了很多改变,所以也许我没有正确连接?


您的测试代码有几个问题;首先,你的依赖关系不好——Spock 1.0不支持@SpringBootTest注释,因此不会初始化上下文,也不会进行后处理,因此会出现空指针异常:不会自动装配任何内容。

Spock 1.1 中添加了对该注释的支持,该版本仍然是候选版本,因此您必须使用它:

dependencies {
    compile('org.springframework.boot:spring-boot-starter-data-jpa')
    compile('org.springframework.boot:spring-boot-starter-security')
    compile('org.springframework.boot:spring-boot-starter-web')
    compile group: 'io.jsonwebtoken', name: 'jjwt', version: '0.6.0'

    compile('org.codehaus.groovy:groovy')

    testCompile('org.springframework.boot:spring-boot-starter-test')
    testCompile('org.spockframework:spock-core:1.1-groovy-2.4-rc-1')
    testCompile('org.spockframework:spock-spring:1.1-groovy-2.4-rc-1')
    testCompile group: 'com.h2database', name: 'h2', version: '1.4.192'
}

那么,您的 application-test.properties 路径是错误的,应该是/application-test.properties因为它位于类路径的根目录中:

@SpringBootTest(classes = DemoApplication.class, 
                webEnvironment = WebEnvironment.RANDOM_PORT)
@TestPropertySource("/application-test.properties")
public class TokenUtilityTest extends Specification {

    @Autowired
    TokenUtility tokenUtility

    def "test a valid token creation"() {
        def userDetails = new User("test", "password", Collections.emptyList());

        when:
        def token = tokenUtility.buildToken(userDetails)

        then:
        token != null
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Boot 1.4、Spock 和 application.properties 的相关文章

随机推荐

  • ASP.NET MVC 自定义路由约束、依赖注入和单元测试

    关于这个话题 我又问了一个问题 ASP NET MVC 自定义路由约束和依赖注入 https stackoverflow com questions 8308642 asp net mvc custom route constraints
  • 如何使用网络音频 API 播放声音文件 Safari?

    我正在修改一个脚本来播放我在 Codepen 上找到的 mp3 以使其能够在 Safari 上运行 在 Firefox 和 Chrome 中它工作正常 但 Safari 抱怨 未处理的承诺拒绝 类型错误 没有足够的参数 索引 html 25
  • 尝试安装biopython后Conda返回未找到属性错误符号

    我正在尝试让biopython工作 似乎我在这个过程中破坏了conda 此时 将显示 conda 的帮助菜单 并且conda version回报conda 4 7 5但其他任何事情包括conda info抛出错误AttributeError
  • 在树枝中显示货币符号

    如何在树枝中显示货币符号 我保存了符号的数值 例如 for EURO 8364 for DOLLAR 36 当我渲染这些值时 被转换为 amp 并且货币符号不显示 任何想法将不胜感激 谢谢 为了做得好 你必须添加一个function htt
  • 使用knitr生成复杂的动态文档

    最小的可重现的示例 RE 下面是我尝试弄清楚如何使用knitr用于生成复杂的动态文档 这里的 复杂 不是指文档的元素及其布局 而是指非线性逻辑底层 R 代码块 虽然提供的 RE 及其结果表明solution 基于这种方法可能效果很好 我会喜
  • 如何使用 Jenkins Workflow 插件进行 SCM 轮询

    在普通的自由式项目中 我将 SCM 插件配置为指向我想要发布的 Git 存储库 并启用 轮询 SCM 选项 这允许我配置一个 Stash webhook 来告诉 Jenkins 每当有更改时到那个仓库 这样 只要将更改推送到存储库 就可以触
  • 我可以在 Microsoft hyper-v 虚拟机中运行 Android Studio(Android SDK 模拟器)吗?

    我可以在 Microsoft hyper v 虚拟机中运行 Android Studio 和 Android SDK 模拟器吗 请仔细阅读 我已经经常将 Hyper V 用于其他目的 现在我需要开发一个Android应用程序 我已经安装了新
  • 一天地理编码服务调用次数过多

    我在使用 google 地图地理编码功能时收到此错误消息 据我所知 当我超过一天 2500 个请求的免费限制时 就会发生这种情况 不过 我已经设置了一个计费选项来为额外的请求支付额外费用 但我仍然收到此错误 当我设置账单时 它要求我创建一个
  • 共享服务中的私有主题与公共只读主题

    我已经开始开发一个 Angular 8 项目 其中两个兄弟组件必须交换数据 到目前为止 方法是在父服务中拥有一个 EventEmitter 然后 子组件调用这些发射器上的发射方法 将数据传递给其他同级组件 这是一个示例案例 共享服务 不好
  • Jekyll 帖子未生成

    我正在尝试向 Jekyll 网站添加新帖子 但运行时无法在生成的页面上看到它jekyll serve 无法生成 Jekyll 帖子的常见原因有哪些 该帖子未放置在 posts 目录 当您更改collections dir在你的配置中 默认
  • 我的 docker 容器有多少个 CPU?

    我正在编写一个并行运行的库 该库经常在 docker 容器中使用 我想启动与我的 docker 容器分配的核心一样多的线程 docker 是否将 CPU 限制设置为环境变量 例如 如果我的用户在创建容器时设置了两个 CPU docker r
  • 使用 Scala 新动态类型的动态代理

    是否可以使用 Scala 新的动态类型功能创建类似 AOP 的拦截器 例如 是否可以创建一个通用的秒表拦截器 可以与任意类型混合来分析我的代码 或者我仍然需要使用 AspectJ 吗 我相当确定Dynamic仅当您选择的对象尚不具有您选择的
  • 在 Sencha Touch 中禁用轮播过度滚动/过度拖动

    在 Sencha Touch 2 轮播的末尾或开头 用户可以将项目拖过它应该能够到达的位置并显示白色背景 此处的屏幕截图 https i stack imgur com i10Ak png https i stack imgur com i
  • 在 python 3 中解析 .docx

    我目前正在编写一个 python 3 程序 该程序可以解析某些 docx 文件并从中提取文本和图像 我一直在尝试使用docx https github com mikemaccana python docx但它不会导入到我的程序中 我已经安
  • 在 Android 版 Phonegap 中调用 SOAP Web 服务

    我想打电话SOAP网络服务在Phonegap Android 我已经尝试过这段代码但是在回复文字有未定义和Status Error
  • JPA (Hibernate) 列映射中的原始类和包装类有什么区别?

    例如 数据库表中有一个整数列 然后在java模型中 它可以映射为原始整数 and Integer 我的问题是在这种情况下 int 和 Integer 有什么区别 以及性能问题 谢谢 我倾向于避免使用原语 对于 Id 属性尤其如此 这使得可以
  • LiquibasegenerateChangeLog 失败:Java 堆空间

    当我尝试从 DB2 数据库生成 SQL 数据时 遇到 Java 堆空间问题 大约有 25 个表 大约 1000 条记录 我使用以下脚本生成变更集数据 C liquibase 3 0 2 bin gt liquibase driver com
  • 多个超级用户命令 Android

    我正在尝试运行这个 String hin1 su c mount o remount rw t yaffs2 dev block mtdblk3 system try Runtime getRuntime exec hin1 catch I
  • 在数据表中启用滚动 X 时禁用底部搜索

    我正在尝试数据表中的数据显示https datatables net https datatables net i can show data from MYSQL to Datatables but i want column in da
  • Spring Boot 1.4、Spock 和 application.properties

    我正在尝试使用 Spock 为我的 Spring Boot 1 4 0 编写一些测试 但我的 application test properties 文件没有被拾取 我的 gradle 中有这个 dependencies compile o