gpt4 book ai didi

java - PowerMock,如何使静态方法多次返回值?

转载 作者:行者123 更新时间:2023-11-30 11:18:18 26 4
gpt4 key购买 nike

这可能是一个简单的问题,但我无法通过合理的搜索找到答案。我试图让一个静态方法在多个测试中多次返回一个值。我无法通过 PowerMock 的模拟静态方法实现这一点。简而言之,我有一个像这样的 JUnit 测试 @BeforeClass

@RunWith(PowerMockRunner.class)
@PrepareForTest(StaticStuff.class)
public class MyTest extends TestCase {
@BeforeClass
public static void init() {
// Mock some stuff
PowerMockito.mockStatic(StaticStuff.class);
Mockito.when(StaticStuff.get()).thenReturn("something");
}
}

现在,这适用于访问静态方法的第一个测试,但其余的将收到“null”(更新:或“真实”方法将返回的任何其他值)。我可以解决这个问题,只需将 @BeforeClass 更改为 @Before,从而为每个测试重新创建静态模拟。但是 afaik,这不是执行此操作的正确方法。对于这种特殊情况,这样做就可以了,但我相信应该有一种方法可以提供可以“随时”调用该方法的信息。

实际上,我从文档中了解到,相同的值应该“默认情况下无限次”返回(但事实并非如此。来自 Mockito 文档:“一旦 stub ,模拟方法将始终返回 stub 值,无论它返回多少次叫做。')。此外,我希望说明调用量应该如此简单(但事实并非如此):

Mockito.when(StaticStuff.get()).thenReturn("something").times(10);

也许我只是错过了什么?

最佳答案

测试应该相互独立。如果您使用 JUnit,则根本无法确定测试的顺序(请参阅 https://github.com/junit-team/junit/wiki/Test-execution-order)。我认为在 @BeforeClass 中创建模拟实际上是一种不好的做法,因为它可能导致测试相互依赖。所以我会简单地推荐使用@Before 方法来初始化所有模拟,并使用@BeforeClass ,如果你准备一些非常常见的测试(比如连接池或类似的东西)。

关于java - PowerMock,如何使静态方法多次返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23887615/

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