2013-09-25 3 views
0

Внутри метода создается локальный экземпляр класса. напримерВыполнение проверки на метод void с использованием powerMock

class TestMe{ 
    public void foo() 
    { 
     A a = new A(); 
     a.setState(this); 
    } 
    } 




class A 
{ 
    private B b; 

    public void setState(TestMe tm) 
    { 
     b.doSomething(); //returns void 
     b.doSomethingAdditional(); //returns void 
    } 
} 

При тестировании Foo, используя powerMock, я хотел бы сделать проверить, чтобы убедиться, что методы йоЗотеЬЫпд() и doSomethingAdditional() называются. Я смотрел что-то вроде строк Mockito.verify (ObjectName) .functionName(). Какие-либо предложения??

ответ

2

PowerMock работает в сочетании с Mockito. У вас все еще есть все возможности для проверки использования вызовов Mockito.

Как только вы издеваетесь над B, когда вы издеваетесь над его функциями, а затем передаете его в A, вы можете использовать Mockito.verify.

verify(mockBObject).doSomething(); 
verify(mockBObject).doSomethingAdditional(); 

Это может потребоваться несколько дополнительных шагов, чтобы подключить ваш фиктивный объект в A, так как вы не конструктор, где вы можете определить B прошли в, или есть какой-то конструктор вклиниться. Если у вас есть A, инициализируйте B при создании A, вы можете использовать некоторые инструменты PowerMockito, чтобы сказать, что делать. Просто насмешка B не будет делать, потому что, когда ваш A настроен, он не знает, как использовать свой издеваемый объект в своем коде как внутренний номер B.

PowerMockito.whenNew(B.class).withNoArguments().thenReturn(mockBObject);

Как прямо сейчас B никогда установки или инициализации, так что это может вызвать некоторые проблемы. Если B - это статический объект singleton, который вы предполагаете, создается где-то в другом месте, вы можете сделать подобное издевательство статического вызова getInstance(), чтобы вернуть макет B.

+0

Благодарим вас за полезные комментарии. Я посмотрел на код, о котором идет речь, и, к сожалению, B не имеет метода setter. его построенный локально, используемый для выполнения нескольких задач, а затем gc'd. Есть ли какая-нибудь работа вокруг этого? –

+0

Как B инициализируется в вашем фактическом коде. Создает ли новый в какой-либо функции настройки? Если B является нулевым в первый раз, когда A пытается его использовать, то он делает новый B тогда? Какой шаблон вы используете. – Walls

+0

внутри setState, B строится и вызывается функция. –

Смежные вопросы