2015-05-15 2 views
0

У меня есть эта линия, которая interferring в модульном тесте:Как обойти вызовы статических методов?

OtherClass.staticMethodThatWillErrorIfCalled().isAvailable(); 

Если бы не было статичным, я мог бы просто фиктивный OtherClass, а затем сделать это:

Mockito.doReturn(null).when(mockedOtherClass).staticMethodThatWillErrorIfCalled(); 
Mockito.doReturn(true).when(mockedOtherClass).isGuiMode(); 

и тот факт, что он будет ошибка, вызванная тем, что мои попытки использовать powermockito бесполезны.

Я не уверен, как я могу это сделать. Все, что я хочу сделать, это пропустить эту строку (это проверка if) и продолжить, как если бы она вернулась. Каков наилучший способ сделать это?

+0

Пожалуйста, размещайте дополнительную информацию, весь тест устройства будет хорошим началом. Проверяется ли статический метод в классе? –

+0

Макет. Вы * можете * издеваться над статикой. –

+0

@AlexBuyny Я просто выполняю метод в ClassToBeTested, но этот метод имеет проверку if, о которой я говорю, которая вызовет этот статический метод, который вызывает ошибку. Я не забочусь о тестировании статического метода или чего-либо еще в OtherClass. Я просто хочу получить истинное значение, возвращаемое, чтобы я мог выполнить и протестировать метод в ClassToBeTested – Aequitas

ответ

0

Я бы требовать больше информации, чтобы дать более конкретный ответ, но это то, что я имею в виду ...

Сначала скажите PowerMockito, что вы будете насмешливый статический метод OtherClass.

@RunWith(PowerMockRunner.class) 
@PrepareForTest(OtherClass.class) 

Это аннотации уровня класса, которые входят в ваш класс тестирования устройств.

Затем издеваться над тем, что делать, когда вызывается этот метод.

PowerMockito.mockStatic(OtherClass.class); 
Mockito.when(OtherClass.isAvailable()).thenReturn(Boolean.TRUE); 

ли это в @Before метод на вашем модульного тестирования.