Java 使用Mockito调用最终类静态方法的Mock对象

Java 使用Mockito调用最终类静态方法的Mock对象,java,unit-testing,junit,mockito,Java,Unit Testing,Junit,Mockito,我刚开始模拟应用程序的不同层。我的一个模拟对象在调用最后一个类静态方法时返回NPE。有办法解决这个问题吗 e、 g Mockito不支持模拟最终类。请看。它允许您模拟静态方法和类。它可以与Mockito一起工作,解释了如何做到这一点 您必须同时使用PowerMock和Mockito 我不明白您的代码片段试图做什么,但是下面的代码片段允许Calendar类的静态getInstance()方法返回模拟的Calendar对象。也许这会给你指明正确的方向 在班级一级: @RunWith(PowerMoc

我刚开始模拟应用程序的不同层。我的一个模拟对象在调用最后一个类静态方法时返回NPE。有办法解决这个问题吗

e、 g


Mockito不支持模拟最终类。请看。它允许您模拟静态方法和类。它可以与Mockito一起工作,解释了如何做到这一点

您必须同时使用PowerMock和Mockito

我不明白您的代码片段试图做什么,但是下面的代码片段允许
Calendar
类的静态
getInstance()
方法返回模拟的
Calendar
对象。也许这会给你指明正确的方向

在班级一级:

@RunWith(PowerMockRunner.class)
@PrepareForTest(Calendar.class)
public class XXXXXX {
在您的测试方法中:

PowerMockito.mockStatic(Calendar.class);
    Calendar calendar = mock(Calendar.class);
    when(calendar.get(eq(Calendar.HOUR_OF_DAY))).thenReturn(3);

    Mockito.when(Calendar.getInstance()).thenReturn(calendar);

Mockito一般不能模拟最终方法;然而,我怀疑即使删除
final
也会有所帮助……用mockito来模拟final类或statis方法是不可能的。不过,我认为你可以用power mock做到这一点。也许你可以看一看对不起,因为混淆,我已经更新了我的代码片段。请检查一下没关系,Mockito不能模拟期末考试,你是说它在模拟期末考试?我认为这只是调用最后一个类的静态方法,如果我的类已经用
@RunWith(theory.class)
注释了怎么办?
PowerMockito.mockStatic(Calendar.class);
    Calendar calendar = mock(Calendar.class);
    when(calendar.get(eq(Calendar.HOUR_OF_DAY))).thenReturn(3);

    Mockito.when(Calendar.getInstance()).thenReturn(calendar);