gpt4 book ai didi

java - 在 JUnit 的 @Before 方法中调用 TimeZone.setDefault 是否安全?

转载 作者:行者123 更新时间:2023-11-30 05:56:48 25 4
gpt4 key购买 nike

Here是关于在 JUnit 测试的 @Before 方法中为测试代码设置默认时区的注释。但 TimeZone.setDefault 是静态方法。它会影响 @BeforeTimeZone.setDefault 测试成功完成后运行的其他测试吗?

最佳答案

这里有很多事情需要检查,这取决于您如何运行测试。

可以考虑以下因素:

  1. 既然您在问题中标记了“maven”:负责运行测试的 Maven 的surefire/failsafe 插件可以在 1 个或多个 JVM 中同时运行多个测试,这完全取决于它们的配置。因此,即使测试在本地通过,在构建过程中也可能会偶尔失败。

  2. @Before@After 分别在测试用例中的每个测试之前和之后调用。即使测试失败,@After 也会被调用。因此,可能记住默认时区并在测试后将其设置回来应该没问题,但不“重新设置”“@After” block 中的状态可能会导致后续测试中的定义不正确。

恕我直言,更好的方法是使用java.time.Clock抽象。请参阅this question for examples

另一个可能的选择是重构代码以使用某些“工厂”来提供当前日期/时间。然后在单元测试中,您可以实例化该工厂并将其作为依赖项“注入(inject)”到被测代码中。一种手工钟表

关于java - 在 JUnit 的 @Before 方法中调用 TimeZone.setDefault 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53034547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com