我正在使用JodaTime
2.1,并且正在寻找一种单元测试代码的模式,该模式执行日期/时间操作以确保其在所有时区均正常运行并且独立于DST。
特别:
new DateTime()
来的地方以获取当前时间)您可以@Rule
为此使用。这是规则的代码:
import org.joda.time.DateTimeZone;
import org.junit.rules.TestWatcher;
import org.junit.runner.Description;
public class UTCRule extends TestWatcher {
private DateTimeZone origDefault = DateTimeZone.getDefault();
@Override
protected void starting( Description description ) {
DateTimeZone.setDefault( DateTimeZone.UTC );
}
@Override
protected void finished( Description description ) {
DateTimeZone.setDefault( origDefault );
}
}
您可以使用如下规则:
public class SomeTest {
@Rule
public UTCRule utcRule = new UTCRule();
....
}
这将在SomeTest
执行每个测试之前将当前时区更改为UTC,并且将在每次测试后恢复默认时区。
如果要检查多个时区,请使用如下规则:
import org.joda.time.DateTimeZone;
import org.junit.rules.TestWatcher;
import org.junit.runner.Description;
public class TZRule extends TestWatcher {
private DateTimeZone origDefault = DateTimeZone.getDefault();
private DateTimeZone tz;
public TZRule( DateTimeZone tz ) {
this.tz = tz;
}
@Override
protected void starting( Description description ) {
DateTimeZone.setDefault( tz );
}
@Override
protected void finished( Description description ) {
DateTimeZone.setDefault( origDefault );
}
}
将所有受影响的测试放在抽象基类中AbstractTZTest
并对其进行扩展:
public class UTCTest extends AbstractTZTest {
@Rule public TZRule tzRule = new TZRule( DateTimeZone.UTC );
}
这将AbstractTZTest
使用UTC 执行所有测试。对于您要测试的每个时区,您将需要另一个类:
public class UTCTest extends AbstractTZTest {
@Rule public TZRule tzRule = new TZRule( DateTimeZone.forID( "..." );
}
由于测试用例是继承的,仅此而已-您只需要定义规则即可。
以类似的方式,您可以移动系统时钟。使用调用规则DateTimeUtils.setCurrentMillisProvider(...)
以模拟测试在特定时间运行并DateTimeUtils.setCurrentMillisSystem()
恢复默认值。
注意:您的提供程序将需要一种使时钟滴答作响的方法,否则所有新DateTime
实例将具有相同的值。每次getMillis()
调用时,我通常将值提前一毫秒。
注意2:仅适用于joda-time。它不影响new java.util.Date()
。
注意3:您无法再并行运行这些测试。它们必须按顺序运行,否则其中一个将很有可能在运行另一个测试时恢复默认时区。
问题内容: 假设我有以下模型: 我想通过创建一个在将来(今天+ 1或某天)结束的事件进行测试,并对日期和时间进行打桩,以便系统认为我们已经达到了该将来的日期。 就python而言,我希望能够存根所有系统时间对象。这包括,和任何其他标准日期/时间对象。 这样做的标准方法是什么? 问题答案: 编辑 :由于我的答案是此处接受的答案,因此我正在对其进行更新,以使所有人都知道在此同时创建了更好的方法,这是f
问题内容: 我正在使用python(2.7)程序,该程序会产生许多不同的matplotlib图(数据不是随机的)。我愿意实施一些测试(使用unittest)以确保生成的数字正确。例如,我将期望的图形(数据或图像)存储在某个位置,运行我的函数并将结果与参考进行比较。有没有办法做到这一点 ? 问题答案: 以我的经验,图像比较测试最终带来的麻烦多于其应有的价值。如果要跨多个系统(例如TravisCI
我有下一个代码: 但当我运行它时,它会出错: TypeError:不支持的类型“ 我尝试了很多方法,但似乎不可能将日期时间保存到DynamoDB。顺便说一句,它在MongoDB中运行良好。 有什么解决办法吗?
问题内容: 如何使该单元测试在所有时区都通过测试,而与DST是否处于活动状态无关? 问题答案: 默认情况下,新用户将使用系统默认时区。如果您想要一个特定的时区,请致电: 对于第二项测试,您想要将其更改为: 请注意,通常不应该使用静态变量,因为它不是线程安全的。(而Joda Time 实现 是 线程安全的。)
问题内容: 我有一种方法,根据从当前日期开始,该方法对从数据库中获取的数据实施不同的逻辑。 我想通过单元测试创建对象来测试它,将它们保存在数据库中并调用被测试的方法。但是,为了获得可预测的结果,我每次都需要更改系统日期,而且我不知道如何在Java中执行此操作。 有什么建议吗? 问题答案: 您可以使用当前日期生成预期结果。 或者您编写系统以使用您在测试时提供的日期/时间(而不是时钟),这样,时间
问题内容: 我已经编写了一个单元测试,将文件写入文件系统,没有给它写入工作目录的路径。因此,如果从项目目录执行,它将写入项目根目录;如果在项目父目录中,它将写入父目录根目录。 那么写入目标目录的正确方法是什么?可能是目标目录中的目录? 如果我只用文件指定,它将写入父项目目标而不是项目目标。 更新 :我实际上想要测试完成后的文件。该文件是第三方的提取格式,需要将其发送给第三方。可以打开/关闭该测试,