gpt4 book ai didi

java - 如何使用 Mockito 在 java 中模拟 new Date()

转载 作者:IT老高 更新时间:2023-10-28 20:51:07 30 4
gpt4 key购买 nike

我有一个使用当前时间进行一些计算的函数。我想用 mockito 来模拟它。

我想测试的类的一个例子:

public class ClassToTest {
public long getDoubleTime(){
return new Date().getTime()*2;
}
}

我想要类似的东西:

@Test
public void testDoubleTime(){
mockDateSomeHow(Date.class).when(getTime()).return(30);
assertEquals(60,new ClassToTest().getDoubleTime());
}

可以模拟吗?我不想更改“已测试”代码以便进行测试。

最佳答案

正确的做法是重组您的代码,使其更易于测试,如下所示。重构你的代码以移除对 Date 的直接依赖将允许你为正常运行时和测试运行时注入(inject)不同的实现:

interface DateTime {
Date getDate();
}

class DateTimeImpl implements DateTime {
@Override
public Date getDate() {
return new Date();
}
}

class MyClass {

private final DateTime dateTime;
// inject your Mock DateTime when testing other wise inject DateTimeImpl

public MyClass(final DateTime dateTime) {
this.dateTime = dateTime;
}

public long getDoubleTime(){
return dateTime.getDate().getTime()*2;
}
}

public class MyClassTest {
private MyClass myClassTest;

@Before
public void setUp() {
final Date date = Mockito.mock(Date.class);
Mockito.when(date.getTime()).thenReturn(30L);

final DateTime dt = Mockito.mock(DateTime.class);
Mockito.when(dt.getDate()).thenReturn(date);

myClassTest = new MyClass(dt);
}

@Test
public void someTest() {
final long doubleTime = myClassTest.getDoubleTime();
assertEquals(60, doubleTime);
}
}

关于java - 如何使用 Mockito 在 java 中模拟 new Date(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11887799/

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