2017-02-21 4 views
0

У меня есть два класса:Передразнивало значение не возвращается

public class Foo { 
    public int getInt(){ 
     return 10; 
    } 
} 

public class Bar { 
    Foo testClass = new Foo(); 

    public Foo getTestClass() { 
     return testClass; 
    } 

    public void setTestClass(Foo testClass) { 
     this.testClass = testClass; 
    } 

    public int get(){ 
     return testClass.getInt(); 
    } 
} 

И, наконец, у меня есть тестовый класс с издеваться для Foo:

public class TestClass { 

    Foo test; 

    @Before 
    public void init(){ 
     test = Mockito.mock(Foo.class); 
     Mockito.when(test.getInt()).thenReturn(5); 
    } 

    @Test 
    public void tst(){ 
     Bar t = new Bar(); 
     Assert.assertEquals(t.get(), 5); 

    } 
} 

Не могли бы вы сказать мне, почему я получаю 10 из t.get() хотя в макете «Я говорю», что хочу 5?

Как я могу написать Mock, чтобы получить насмешливую стоимость?

Заранее спасибо.

+0

Кажется, ваш макет не настроен. – Mistalis

ответ

1

Вы забыли на самом деле установить ваш макет с вызовом на t.setTestClass(test);.

+0

Что делать, если метод setTestClass будет защищен? Теперь я не могу использовать t.setTestClass – Cwaniak

+0

Тогда вы могли бы либо сменить свой конструктор, чтобы придать им макет, либо сделать сеттер доступным через отражение. – QBrute

0

Когда вы пишете:

public class TestClass { 

    Foo test; 

    @Before 
    public void init(){ 
     test = Mockito.mock(Foo.class); 
     Mockito.when(test.getInt()).thenReturn(5); 
    } 

    @Test 
    public void tst(){ 
     Bar t = new Bar(); 
     Assert.assertEquals(t.get(), 5); 
    } 
} 

Вы насмешливый свой Foo класс, но не использовать его в Bar классе. Поэтому, если вы вызовете метод возврата, он не отправит результат, который вы пытались высмеять

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