我有这门课
class MyObject {
private LocalDateTime date;
public LocalDateTime getDate() { return this.date; }
public void myMethod() {
this.date = LocalDateTime.now();
}
}
如何测试日期设置是否正确?我无法模拟now()
,因为它是静态的,如果我在测试中使用LocalDateTime,两个日期将不相同。
更新你的课程如下:
class MyObject {
private LocalDateTime date;
public Supplier<LocalDateTime> localDateTime = ()-> LocalDateTime.now();
public LocalDateTime getDate() { return this.date; }
public void myMethod() {
this.date = localDateTime.get();
}
}
在测试方法中,在调用myMethod之前更新供应商变量,如下所示:
objMyObject.localDateTime = ()-> LocalDateTime.parse("2020-11-24T23:59:59.999");
您可以在调用myMethod()
之前生成一个日期时间,并确保此日期早于或等于getDate()
返回的日期,类似于:
@Test
public void testDate() {
MyObject object = new MyObject();
// Get the current date time
LocalDateTime time = LocalDateTime.now();
// Affect the current date time to the field date
object.myMethod();
// Make sure that it is before or equals
Assert.assertTrue(time.isBefore(object.getDate()) || time.isEqual(object.getDate()));
}
如果你不介意给你的类添加耦合,一个更好的方法是提供一个供应商
public class MyObject {
private final Supplier<LocalDateTime> supplier;
private LocalDateTime date;
public MyObject() {
this(LocalDateTime::now);
}
public MyObject(final Supplier<LocalDateTime> supplier) {
this.supplier = supplier;
}
public LocalDateTime getDate() { return this.date; }
public void myMethod() {
this.date = supplier.get();
}
}
这样就可以很容易地在您的测试用例中创建用于测试目的的
供应商
。
例如,测试用例可以是:
@Test
public void testDate() {
LocalDateTime time = LocalDateTime.now();
MyObject object = new MyObject(() -> time);
object.myMethod();
Assert.assertTrue(time.isEqual(object.getDate()));
}
我现在不能嘲笑,因为它是静态的
确实如此——但幸运的是,您不必这样做。相反,将“日期/时间提供者”视为依赖项,并将其作为正常注入。java.time
提供了这样一个依赖项:java.time.时钟
。在测试中,您可以通过Clock.fixed(...)
(不需要模拟)提供固定时钟,对于生产,您可以使用Clock.system(...)
。
然后将代码更改为:
class MyObject {
private final Clock clock;
private LocalDateTime date;
public MyObject(Clock clock) {
this.clock = clock;
}
public LocalDateTime getDate() {
return this.date;
}
public void myMethod() {
this.date = LocalDateTime.now(clock);
}
}
...或者您通常处理依赖项的方式。
Java 8 添加了一个新的 java.time API 来处理日期和时间 (JSR 310)。 我有字符串形式的日期和时间(例如< code >“2014-04-08 12:30”)。如何从给定的字符串中获取< code>LocalDateTime实例? 在我完成对象的工作后:如何将实例转换回与上述格式相同的字符串?
我正在尝试将存储在mongoDb中的Javascript日期转换为Java LocalDateTime ISO\u Date\u TIME,并且我一直遇到ParseException,我不知道为什么我的代码会出错。首先,代码: 解析器: 传递的日期格式为“2021 10月7日星期四21:29:36 GMT 0000(协调世界时)” 我收到的错误是: getUserById()中的异常,原因='ja
问题内容: Java 8添加了新的java.time API,用于处理日期和时间(JSR 310)。 我将日期和时间作为字符串(例如)。如何从给定的字符串中获取实例? 处理完对象后:如何将实例转换回具有上述格式的字符串? 问题答案: 解析日期和时间 要从字符串创建对象,可以使用方法。它使用字符串和作为参数。所述用于指定的日期/时间模式。 格式化日期和时间 要创建对象的格式化字符串,可以使用方法。
Mocito不处理静态方法实例,我用它来映射user到UserDto。我有错误:error:org.mockito.exceptions.misusing.missingMethodInvocationException:when()需要一个参数,该参数必须是“mock上的方法调用”。例如:when(mock.getArticles()).thenreturn(articles); 此外,此错误可
问题内容: tl; dr:我想在Redshift中生成一个日期表,以使报表更易于生成。最好不需要在Redshift中已经有大表,而需要上传一个csv文件。 长版:我正在处理一份报告,其中我必须平均一周中每天创建的新项目。日期范围可能跨越数月或更长时间,因此可能有5个星期一,但只有4个星期日,这可能会使数学有些棘手。另外,我不能保证每天都有一个实例,尤其是一旦用户开始切片数据时。其中,这是BI工具的
本文向大家介绍如何从Swift Xcode中的日期创建日期对象?,包括了如何从Swift Xcode中的日期创建日期对象?的使用技巧和注意事项,需要的朋友参考一下 来自Objective C- Background,现在我们不需要使用NSDate,因为Swift已定义了自己的结构类型Date。日期桥接到NSDate类。您可以在与Objective-C API交互的代码中互换使用这些代码。 要了解有