当前位置: 首页 > 面试题库 >

在Java 8上设置Maven单元测试的时区

洪弘毅
2023-03-14
问题内容

如何在Java 8上的maven surefire中设置单元测试的时区?

在Java 7中,此功能以前systemPropertyVariables曾在以下配置中使用,但在Java 8中,测试仅使用系统时区。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
    <systemPropertyVariables>
      <user.timezone>UTC</user.timezone>
    </systemPropertyVariables>

为什么会这样,我该如何解决?


问题答案:

简短答案

现在user.timezone,在surefire在中设置属性之前,Java会更早阅读systemPropertyVariables。解决方案是使用argLine以下命令进行更早的设置:

<plugin>
  ...
  <configuration>
    <argLine>-Duser.timezone=UTC</argLine>

长答案

Java会user.timezone首次
需要时将默认时区考虑在内,然后将其缓存到中java.util.TimeZone。现在,在读取jar文件时已经发生了这种情况:ZipFile.getZipEntry现在调用ZipUtils.dosToJavaTime创建一个Date实例,该实例初始化默认时区。这不是特定于surefire的问题。有人称它为JDK7中的错误。该程序用于以UTC打印时间,但现在使用系统时区:

import java.util.*;

class TimeZoneTest {
  public static void main(String[] args) {
    System.setProperty("user.timezone", "UTC");
    System.out.println(new Date());
  }
}

通常,解决方案是在命令行上指定时区,例如java -Duser.timezone=UTC TimeZoneTest,或使用编程设置TimeZone.setDefault(TimeZone.getTimeZone("UTC"));

完整示例:

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        ... could specify version, other settings if desired ...
        <configuration>
          <argLine>-Duser.timezone=UTC</argLine>
        </configuration>
      </plugin>
    </plugins>
  </build>


 类似资料:
  • 我有个关于Maven的问题。 我有文件名以*Test结尾的单元测试和文件名以*IT结尾的集成测试。 我的理解是,surefire将运行单元测试,故障保险将运行集成测试。 当我运行:mvn清洁安装 同时运行单元测试和集成测试。 当我跑步时: mvn验证 这两个测试也会运行。 我是否可以配置maven,以便在使用:mvn clean install时,只运行单元测试。当我使用mvn验证时,是否只运行集

  • 我正在使用类似的@Input to Angular2@Input to带有get/set的属性。不过,我在弄清楚如何设置单元测试时遇到了一些麻烦。这是我的组件 在我定义组件的每个位置之前都有一个附加的 在我运行这个简单的测试之前 我收到错误 我最初的想法是创建一个模拟顺序常量,并在每个这样的常量之前,将它赋给我的组件... 但是,我不被允许做这个任务 我的下一个假设是,我必须模拟父组件Orders

  • <代码>list.stream()。 列表中的每个项目都将从数据库中删除。 假设列表中有3个项目,如何进行单元测试: 删除被调用了3次。 删除被称为“按顺序/顺序”,即列表中的元素顺序?

  • 运行单元测试时的例外情况是: 还有一个问题是,这是为了测试SampleRouter,还是只是单元测试process类和任何其他支持类?还是使用以下内容来更改它,以便将消息传递到假的直接队列?

  • 对于php开发者来说,做单元测试并不是很方便,这也是大部分phper不愿意写单元测试的原因。但是单元测试对提高程序的质量来说,有实在是太重要的了。 有关这一点,我也是在学习java,体验过单元测试的魅力之后才切身体会到的。 那么现在我们就以herosphp为栗子,一起来看看php的单元测试环境如何配置。 首先,毫无疑问,php的单元测试肯定是要依赖phpunit这个工具了。那么我们要先 安装php

  • 问题内容: 我尝试使用Maven创建一个测试项目,并且单元测试工作正常。但是,当尝试对j2ee项目执行相同操作时,surefire无法找到单元测试。测试位于正确的目录(src / test / java)中,并且正在对其进行编译。 junit测试位于src / test / java / unit / TestAddition.java pom.xml中的surefire插件配置不包含/排除任何文