繁体   English   中英

PowerMockito:检测到未完成的存根(未完成的存根异常)

[英]PowerMockito: Unfinished stubbing detected (Unfinished Stubbing Exception)

逻辑

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) 2017,8,24,8,50,9)方法。 因此,在存根调用期间,PowerMockito尝试对模拟方法进行操作。 在模拟另一个方法时,您无法调用一个模拟方法。

进行此类操作的正确方法不是模拟LocalDateTime ,而是模拟Clock 您的Logic类应该具有您可以注入的Clock的实例,然后可以使用LocalDateTime.now(theClock)代替LocalDateTime.now() 这使Logic类更具可测试性,因为您可以随后注入模拟Clock

您实际上并不需要PowerMockito-普通的Mockito会很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM