如何mock LocalDateTime.now()
时间: 2024-09-25 16:17:30 浏览: 55
在单元测试中,通常需要模拟`LocalDateTime.now()`这样的静态方法以控制时间和日期的行为,因为真实的系统时间可能会对测试结果产生影响。在Spring Boot等框架中,可以利用Mockito库来创建这样的模拟。以下是一个简单的步骤:
1. 首先,你需要添加Mockito到你的项目依赖中。如果你还没有,可以在pom.xml文件中添加:
```xml
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>3.x.y</version>
<scope>test</scope>
</dependency>
```
2. 使用Mockito的`mockStatic`方法来mock `LocalDateTime`类:
```java
import org.junit.Before;
import org.junit.Test;
import org.mockito.MockStatic;
public class YourTestClass {
@Before
public void setUp() {
// 模拟LocalDateTime.now()
MockStatic(LocalDateTime.class);
}
@Test
public void testMethodThatDependsOnCurrentTime() {
// 现在你可以设置Mock的时间点,例如:
LocalDateTime mockNow = LocalDateTime.of(2023, 1, 1, 0, 0);
when(LocalDateTime.now()).thenReturn(mockNow); // 设置now返回特定时间
// 在这里测试你的方法,它会认为当前时间是mockNow
YourClassUnderTest yourObject = new YourClassUnderTest();
yourObject.doSomething();
// 验证预期的行为
// ...
}
}
```
3. 测试完毕后,记得在每个测试方法结束后通过`verify`方法确认`when`的设置已经被调用过一次,或者你想验证的具体行为。
阅读全文