2016-07-09 6 views
2

Я пытаюсь издеваться над методом, любым экземпляром, который вызывает этот метод. Насколько я мог читать, это не может случиться с Mockito, и это должно быть сделано с PowerMockito, но я не могу понять, как это должно быть сделано. У меня естьМетод mocking для всех экземпляров класса с PowerMockito

public class B{ 
    public void veryAnnoyingMethod(int i, short s){} 
} 
public class A{ 
    public void veryImportantMethod(){ 
     B newB = new B(); 
     newB.veryAnnoyingMethod(i,s); 
     ... 
    } 
} 

Я пытаюсь проверить veryImportantMethod() и хочу, чтобы дразнить veryAnnoyingMethod(). Я не хочу издеваться над конструктором, как описано здесь: Mocking methods of local scope objects with Mockito, потому что кроме veryAnnoyingMethod() Мне нужен newB полностью функциональный.

я придумал что-то вроде:

B dummyB = PowerMockito.spy(new B()); 
PowerMockito.doReturn(null).when(dummyB.veryAnnoyingMethod(Mockito.anyInt(), Mockito.anyShort())); 

Но он бросает исключение, и я не думаю, что это то, что я на самом деле нужно.

UPDATE

После немного больше чтения, кажется, я должен использовать PowerMockito.stub или PowerMockito.supress. Так что я попытался следующие:

PowerMockito.stub(PowerMockito.method(B.class, "veryAnnoyingMethod", int.class, short.class)).toReturn(null); 

или

PowerMockito.supress(PowerMockito.method(B.class, "veryAnnoyingMethod", int.class, short.class)); 

Но либо метод по-прежнему выполняется

ответ

1

ОК, я, наконец, получил его на работу. Работает любой из stub и suppress. Тест выглядит примерно так:

@RunWith(PowerMockRunner.class) 
@PrepareForTest(B.class) 
class TestClassAWithPowerMockito{ 
    @Test 
    public void testVeryImportantMethod() throws Exception { 
     A a = new A(); 
     PowerMockito.suppress(PowerMockito.method(B.class, "veryAnnoyingMethod", int.class, short.class)); 
     a.veryImportantMethod(); 
     ... 
    } 
} 

Обратите внимание на @RunWith(PowerMockRunner.class) и @PrepareForTest(B.class) я должен был пройти тест с использованием PowerMockito в отдельном классе, потому что добавление эти 2 нотации сделали некоторые из моих других тестов (которые не используют PowerMockito, но только Mockito) терпят неудачу.

Надеюсь, что это ясно, и помогает кому-то, кто борется с подобной проблемой.