我有以下静态模拟设置:
@ExtendWith(MockitoExtension.class)
TestClass{
@Mock
private static ClassB classBInstance;
@BeforeAll
static void setup(){
MockedStatic<ClassA> mockedStatic = mockStatic(ClassA.class);
mockedStatic.when(() -> ClassA.someMethod(ClassB.class)).thenReturn(classBInstance);
}
@Test
void testMethod(){
var mockedInstanceReference = ClassA.someMethod(ClassB.class);
}
}
在这里,我在 mockedInstanceReference 字段中获得了空引用。但在这个配置中:
@ExtendWith(MockitoExtension.class)
TestClass{
@Mock
private static ClassB classBInstance;
@Test
void testMethod(){
MockedStatic<ClassA> mockedStatic = mockStatic(ClassA.class);
mockedStatic.when(() -> ClassA.someMethod(ClassB.class)).thenReturn(classBInstance);
var mockedInstanceReference = ClassA.someMethod(ClassB.class);
}
}
我没问题,我得到了正确的模拟参考。我的问题是:。为什么? junit 5中@BerforeAll注解处理和@Mock字段初始化之间的顺序是什么?
这是因为你使用了错误版本的junit。将其降级到 juit 4 就可以了。