Статистический метод с использованием PowerMock только для первого теста, но не для всех - PullRequest
0 голосов
/ 11 июля 2019

В тестируемом классе «класс A» имеется нестатическое поле типа «B nonStaticField», создание которого осуществляется вызовом статического метода getValue(int i) «класса B». Я издеваюсь над этим классом B.getValue(), поэтому он возвращает мне насмешку над этим nonStaticField. Однако я заметил, что:

when(B.getValue()).thenReturn(mockOfNonStaticField) правильно возвращает макет только для первого метода тестирования, при этом все, что возвращается, не является макетом.

class A{

private B nonStaticField = B.getValue(someInt); // static method

}


@RunWith(PowerMockRunner.class)
@PrepareForTest({B.class})
class ATest{

@Mock
private static B nonStaticFieled; // it's static here, non-static in class under test

@BeforeClass
    public static void initStatic() {
        mockStatic(B.class);
        nonStaticFieled = mock(B.class); // hence it has to be static
        when(B.getValue(any(Integer.class))).thenReturn(nonStaticFieled);
    }

@Test
public void testOne(){
// here mocknig works, when class under test (A) is instantiated mock is returned from B.getValue()
}

@Test
public void testTwo(){
// here mocknig does not work, no mock is returned thus I can't verify this mock interactions by calling verify(nonStaticField).someMethod();
}


}

То, что я хочу, довольно просто - я хочу, чтобы этот макет nonStaticField возвращался для каждого теста.

...