使用系统属性和静态字段迁移到Maven时,JUnit类加载器出现问题

罗伯特·K

我正在努力将我们的旧版构建从使用Ant转换为Maven(如果有问题的话,请参见3.3.3),然后遇到了麻烦。我们的代码库有一个类,用于从系统属性初始化私有静态字段,该属性通常由应用程序调用时的启动脚本填充。执行此代码的单元测试在执行测试之前设置系统属性。在Ant或通过Eclipse JUnit运行器运行单元测试时,一切正常。通过maven运行时,似乎在执行单元测试之前初始化了静态字段,这导致属性不存在,并且测试失败。

我将一个示例类和单元测试放在一起进行演示,因为我不允许在此处发布实际代码。

package foo.bar;

public class ValueClass { 
    private static final String SAMPLE_FIELD = "Foo " + System.getProperty("target.value");

    private final myValueField;

    public ValueClass() {
        myValueField = "random text " + SAMPLE_FIELD;
    }

    public String getValueField() { 
        return myValueField;
    }
}

以及相应的单元测试:

package foo.bar;

import org.junit.Test;
import org.junit.BeforeClass;

public class ValueClassTest { 

    @BeforeClass
    public static void setupBeforeClasses() { 
        System.setProperty("target.value", "value from test");
    }

    @Test
    public void testGetValueField() { 
        String expected = "random text Foo value from test";

        ValuesClass valuesClassInstance = new ValuesClass();

        String actual = valuesClassInstance.getValueField();

        assertEquals(expected, actual);
    }  
}

正如我提到的,当我使用Ant或Eclipse执行时,一切正常。我已经进行了一些日志记录(将一些日志消息放入ValueClass的静态块中),并确定在Eclipse或Ant中运行时,该类是在testGetValueField方法执行期间加载的,而在Maven中,该类是加载的在执行setupBeforeClasses方法之前的某个时间。这将导致使用来自“ target.value”系统属性的空值初始化SAMPLE_FIELD。

任何帮助是极大的赞赏!

雷纳托

如果您可以从设置系统属性pom.xml,则请停止从@BeforeClass方法中进行操作,然后尝试以下操作

<project>
        [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.19.1</version>
        <configuration>
          <systemPropertyVariables>
            <propertyName>propertyValue</propertyName>
            <buildDirectory>${project.build.directory}</buildDirectory>
            [...]
          </systemPropertyVariables>
        </configuration>
      </plugin>
    </plugins>
  </build>
        [...]
</project>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在类中使用静态属性时出现Codeigniter问题

来自分类Dev

Anypoint Studio:警告-配置Mule类加载器时出现问题

来自分类Dev

将Ember从Ember.Object虚拟数据迁移到$ .get数据时出现问题

来自分类Dev

Xamarin 身份验证 - IUser 折旧,迁移到 IAccount 时出现问题

来自分类Dev

Heroku使用Django提供静态文件时出现问题

来自分类Dev

使用Gitlab CI部署静态站点时出现问题

来自分类Dev

使用FFmpeg API加载G.729解码器时出现问题

来自分类Dev

使用估计器在 Java 中加载/提供 tensorflow 模型时出现问题

来自分类Dev

使用awk读取系统文件时出现问题

来自分类Dev

网站迁移到GCP后内部链接出现问题

来自分类Dev

迁移到2.4后,Play的路由文件出现问题

来自分类Dev

Wildfly加载系统属性

来自分类Dev

在Web Api ActionFilters上使用简单注入器注入属性时出现问题

来自分类Dev

使用按钮动画加载场景异步时出现问题

来自分类Dev

使用AWS cli将自定义域迁移到其他API终端节点时出现问题

来自分类Dev

javascript:使用URL类时出现问题

来自分类Dev

使用jQuery和PHP添加类时出现问题

来自分类Dev

使用类和索引单击元素时出现问题

来自分类Dev

使用onclick设置tagName属性时出现问题

来自分类Dev

从AndroidKeystore加载私钥时出现问题

来自分类Dev

加载jquery接口时出现问题,

来自分类Dev

加载链接列表时出现问题

来自分类Dev

读取DateTime字段时出现问题

来自分类Dev

使用Core Data生成的访问器时出现问题

来自分类Dev

使用Chromedriver 78.0.3904.70定位器时出现问题

来自分类Dev

使用参数调用装饰器时出现问题

来自分类Dev

将包含静态工厂方法的 Java 类转换为 Kotlin 时出现问题

来自分类Dev

使用名称空间和静态方法时遇到问题

来自分类Dev

使用 OleDB 将旧工具迁移到新的 Windows 版本时出现编码问题

Related 相关文章

  1. 1

    在类中使用静态属性时出现Codeigniter问题

  2. 2

    Anypoint Studio:警告-配置Mule类加载器时出现问题

  3. 3

    将Ember从Ember.Object虚拟数据迁移到$ .get数据时出现问题

  4. 4

    Xamarin 身份验证 - IUser 折旧,迁移到 IAccount 时出现问题

  5. 5

    Heroku使用Django提供静态文件时出现问题

  6. 6

    使用Gitlab CI部署静态站点时出现问题

  7. 7

    使用FFmpeg API加载G.729解码器时出现问题

  8. 8

    使用估计器在 Java 中加载/提供 tensorflow 模型时出现问题

  9. 9

    使用awk读取系统文件时出现问题

  10. 10

    网站迁移到GCP后内部链接出现问题

  11. 11

    迁移到2.4后,Play的路由文件出现问题

  12. 12

    Wildfly加载系统属性

  13. 13

    在Web Api ActionFilters上使用简单注入器注入属性时出现问题

  14. 14

    使用按钮动画加载场景异步时出现问题

  15. 15

    使用AWS cli将自定义域迁移到其他API终端节点时出现问题

  16. 16

    javascript:使用URL类时出现问题

  17. 17

    使用jQuery和PHP添加类时出现问题

  18. 18

    使用类和索引单击元素时出现问题

  19. 19

    使用onclick设置tagName属性时出现问题

  20. 20

    从AndroidKeystore加载私钥时出现问题

  21. 21

    加载jquery接口时出现问题,

  22. 22

    加载链接列表时出现问题

  23. 23

    读取DateTime字段时出现问题

  24. 24

    使用Core Data生成的访问器时出现问题

  25. 25

    使用Chromedriver 78.0.3904.70定位器时出现问题

  26. 26

    使用参数调用装饰器时出现问题

  27. 27

    将包含静态工厂方法的 Java 类转换为 Kotlin 时出现问题

  28. 28

    使用名称空间和静态方法时遇到问题

  29. 29

    使用 OleDB 将旧工具迁移到新的 Windows 版本时出现编码问题

热门标签

归档