gpt4 book ai didi

java - 无法模拟 System.currentTimeMillis()

转载 作者:行者123 更新时间:2023-12-05 02:42:51 25 4
gpt4 key购买 nike

我正在使用 TestNG 编写单元测试。问题是当我模拟 System.currentTimeMillis 时,它返回实际值而不是模拟值。理想情况下,它应该返回 0L ,但它返回实际值。我应该怎么做才能继续?

class MyClass{

public void func1(){
System.out.println("Inside func1");
func2();
}

private void func2(){
int maxWaitTime = (int)TimeUnit.MINUTES.toMillis(10);
long endTime = System.currentTimeMillis() + maxWaitTime; // Mocking not happening
while(System.currentTimeMillis() <= endTime) {
System.out.println("Inside func2");
}
}
}

@PrepareForTest(System.class)
class MyClassTest extends PowerMockTestCase{
private MyClass myClass;

@BeforeMethod
public void setup() {
MockitoAnnotations.initMocks(this);
myclass = new MyClass();
}
@Test
public void func1Test(){
PowerMockito.mockStatic(System.class)
PowerMockito.when(System.currentTimeMillis()).thenReturn(0L);
myclass.func1();
}
}

最佳答案

制作一个包构造函数,您可以将其传入 java.time.Clock

class MyClass{ 
private Clock clock;
public MyClass() {
this.clock = Clock.systemUTC();
}
// for tests
MyClass(Clock c) {
this.clock = c;
}

然后模拟它进行测试,并使用 this.clock.instant() 获取时钟时间

关于java - 无法模拟 System.currentTimeMillis(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67253755/

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