使用 intellij 运行时单元测试中的系统属性

Posted

技术标签:

【中文标题】使用 intellij 运行时单元测试中的系统属性【英文标题】:System properties in unit tests when run with intellij 【发布时间】:2018-07-18 09:42:29 【问题描述】:

我正在使用 intellij runner 运行单元测试。

在app的main方法中,我们将keystore设置为值:

/home/oozen/workspace/wakeup/src/main/resources/Certif.p12

public void run(String... args)
        System.setProperty("javax.net.ssl.keyStore", vodafoneKeystore);
        System.setProperty("javax.net.ssl.keyStorePassword", vodafoneKeystorePassword);
        logger.info(" **************** WakeUpApp **************** ");
        logger.info("vodafoneKeystore is set to ", vodafoneKeystore);
    

这在生产中可以正常工作。但当我使用 intellij 运行时,单元测试不会。

在测试中,当我记录 getProperty 的结果时,我看到了我们在代码中设置的内容。

在我的测试方法开始时,我可以看到值设置正确:

    logger.info(" ################## KEYSTORE : ", System.getProperty("javax.net.ssl.keyStore"));

 ################## KEYSTORE : /home/oozen/workspace/wakeup/src/main/resources/Certif.p12

但在握手过程中,我看到消息:no certificate found 导致身份验证失败。

有什么想法吗?

我知道我可以使用 arg 运行测试:...-Djavax.net.ssl.keyStore=... 但我不想...... :)

另外,@Thiru 展示了一种在外部设置它的方法,但我的目标是能够从代码中设置它并能够在单元测试中依赖它。

提前致谢

【问题讨论】:

您是否指定了密钥库文件的绝对路径?它存在于系统中吗?您还可以测试文件是否由例如加载。 File.exists() 方法。如果文件存在,看起来问题不适合加载文件,而是如何将证书导入运行测试的 java 存储(在运行/调试配置中指定为 JRE)。 【参考方案1】:

您可以在首选项中使用路径变量来完成。

按照以下步骤操作:

打开首选项 -> 路径变量 点击+图标 添加属性名称和值 点击应用

请参考下图

【讨论】:

那是……但这也意味着我们在代码中设置的任何内容都将被忽略

以上是关于使用 intellij 运行时单元测试中的系统属性的主要内容,如果未能解决你的问题,请参考以下文章

如何在 intellij 中为播放框架应用程序运行单元测试

Spark 单元测试(在 intellij 中)

Junit 单元测试在 intelliJ IDEA 中的安装

排除在 IntellIJ 中运行的测试

IntelliJ 中的业力:测试框架意外退出 [关闭]

使用基于 Gradle 的配置时在 Android Studio (IntelliJ) 上运行简单的 JUnit 测试