带有@Mock注解的字段初始化与@BeforeAll

问题描述 投票:0回答:1

我有以下静态模拟设置:

@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字段初始化之间的顺序是什么?

java unit-testing mocking mockito junit5
1个回答
0
投票

这是因为你使用了错误版本的junit。将其降级到 juit 4 就可以了。

© www.soinside.com 2019 - 2024. All rights reserved.