gpt4 book ai didi

java - PowerMockito:检测到未完成的 stub (未完成的 stub 异常)

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

逻辑

public class Logic {
String date = (LocalDateTime.now()).format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
}

模拟代码

@RunWith(PowerMockRunner.class)
@PrepareForTest({ LocalDateTime.class })
public class LogicTest {

@InjectMocks
Logic target = new Logic();

PowerMockito.mockStatic(LocalDateTime.class);
when(LocalDateTime.now()).thenReturn(LocalDateTime.of(2017, 8, 24, 8, 50, 9));

}

当我尝试为上述函数编写 jUnit 测试用例时,显示异常“UnfinishedStubbingException”。

我阅读了其他答案,但即使在那之后,我也无法理解错误的原因。

最佳答案

您的问题是,在您通知 PowerMockito LocalDateTime 静态后,您正在运行方法 LocalDateTime.of(2017, 8, 24, 8, 50, 9)方法应该被 mock 。因此,PowerMockito 尝试在 stub 调用过程中对模拟方法进行操作。当您正在模拟另一个方法时,您无法调用一个模拟方法。

做这种事情的正确方法不是模拟LocalDateTime,而是模拟Clock。您的 Logic 类应该有一个可以注入(inject)的 Clock 实例,然后您可以使用 LocalDateTime.now(theClock) 而不是 >LocalDateTime.now()。这使得 Logic 类更易于测试,因为您可以注入(inject)模拟 Clock

您实际上并不需要 PowerMockito - 普通的 Mockito 就可以了。

关于java - PowerMockito:检测到未完成的 stub (未完成的 stub 异常),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45858423/

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