gpt4 book ai didi

java - 具有最终类系统和静态方法 currentTimeMillis 的 PowerMock

转载 作者:搜寻专家 更新时间:2023-11-01 01:51:34 25 4
gpt4 key购买 nike

我不明白为什么 PowerMock 会这样做。

测试类

public class Testimpl {
public long test() {
long a = System.currentTimeMillis();
System.out.println("2: " + a);
return a;
}
}

jUnit 类

import static org.mockito.MockitoAnnotations.initMocks;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

@RunWith(PowerMockRunner.class)
@PrepareForTest(System.class)
public class TestimplTest {

@InjectMocks
Testimpl testimpl;

@Before
public void setUp() throws Exception {
initMocks(testimpl);
PowerMockito.mockStatic(System.class);
}

@Test
public void test() {
PowerMockito.when(System.currentTimeMillis()).thenReturn(12345l);
System.out.println("1: " + System.currentTimeMillis());
long a = testimpl.test();
System.out.println("3: " + a);
}

}

输出:

1: 12345

2: 1422547577101

3: 1422547577101

为什么 PowerMock/Mockito 在 jUnit TestimplTest 类中而不是在测试的 Testimpl 类中正常工作?

我将 jUnit 4.11 和 Mockito 1.9.5 与 PowerMock 1.6.1 一起使用。

感谢您的帮助。

最佳答案

注释 @PrepareForTest 必须让您的测试类正确模拟 System.currentTimeMillis() 方法。来源和更多信息:PowerMock wiki

@PrepareForTest 注释中使用正确的类:@PrepareForTest(Testimpl.class),我得到了预期的输出:

1: 12345
2: 12345
3: 12345

关于java - 具有最终类系统和静态方法 currentTimeMillis 的 PowerMock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28219698/

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