2017-02-07 7 views
3

Вызов метода на объекте шпионской каким-то образом не оказывает влияния на реальный осматривали объект:Mockito.spy не изменяя реального объекта

public class AAA { 
    public int a; 

    public void setA(int aa) { 
     this.a = aa; 
    } 

    public int getA() { 
     return a; 
    } 
} 


public class Proof { 
    @Test 
    public void wtf() { 
     AAA obj = new AAA(); 
     AAA spy = Mockito.spy(obj); 

     spy.setA(22); 

     assertThat(obj.getA(), equalTo(22)); 
    } 
} 

Как это может быть? Я полагаю, что тест Proof должен пройти.

+1

Это похоже на предполагаемое поведение? Я не слишком хорошо знаком с Mockito и шпионю, но из документации я вижу, что тестовый пример 'wtf' не должен проходить. Вы утверждаете на 'obj' вместо' spy'. – nbokmans

ответ

3

Как видно из Mockito doc:

Mockito не делегат вызывает переданному реальный экземпляр, вместо этого он фактически создает его копию.

Это означает, что исходный объект obj не изменить с тем, что происходит в осматривали объект spy.

2

Я сделал несколько тестов, и вы должны сделать Assert на шпиона не OBJ:

@Test 
    public void wtf() { 
     AAA obj = new AAA(); 
     AAA spy = Mockito.spy(obj); 

     spy.setA(22); 

     assertThat(spy.getA(), equalTo(22)); 
    } 
Смежные вопросы