2016-12-13 12 views
0

Я пытаюсь использовать mockito для измельчения возвращаемого значения метода3() в классе3, когда я запускаю метод try() в class1 из testclass. У меня есть ограничение в том, что я не могу сделать какое-либо издание для кодов, которые у меня есть. Таким образом, я не могу добавить в конструкторы, чтобы сделать макет в соответствии с некоторыми решениями, которые я видел в Интернете. Я использую MockMVC с помощью WebApplicationContextSetup. Пожалуйста, назовите меня, если можно высмеять значение метода3() только с помощью mockito, и если это невозможно, то какое другое решение я могу использовать, чтобы высмеять значение?SpringMVC Mockito Смысловые значения класса внутри класса

class1 
{ 
    Class2 c2 = new Class2(); 
    public String try() 
    { 
     Something temp1 = c2.method1(); 
    } 
} 

class2 
{ 
    Class3 c3 = new Class3(); 
    public String method1() 
    { 
     return c3.method3(); 
    } 
} 
class3 
{ 
    //Will like to mock the return value of this method 
    public String method3() 
    { 
    return "asd"; 
    } 
} 
testclass 
{ 
    class1 c1 = new class1(); 
    c1.try(); 
} 

Благодаря Alot: D

ответ

0

Что касается вашего кода, это выглядит вам нужно издеваться статический метод:

return Class3.method3(); 

Или не

public String method3() 

Пожалуйста точной, потому что ответ будут отличаться в зависимости от вашей потребности, чтобы издеваться над статическим методом или нет.

+0

Извините, не является статическим методом. Я отредактирую. –

0

Для этого вам необходимо шпионить за классом2.

import org.junit.Before; 
import org.junit.Test; 
import org.mockito.*; 
import static org.junit.Assert.assertEquals; 

public class TestClass { 

@InjectMocks 
private Class1 class1 = new Class1(); 

@InjectMocks @Spy 
private Class2 class2 = new Class2(); 

@Mock 
private Class3 class3; 

@Before 
public void init() { 
    MockitoAnnotations.initMocks(this); 
} 

@Test 
public void testWithMock() { 
    Mockito.when(class3.method3()).thenReturn("mocked"); 
    assertEquals("mocked", class1.doTry()); 
} 

} 
+0

Итак, если между вызовами для класса 3 есть больше классов. Я должен шпионить за всеми этими промежуточными классами? –

+0

Да, действительно. Обычно, когда вы должны делать такие сложные вещи в своих тестах, либо вы тестируете устаревший код, либо вы в определенном случае (это происходит), либо вы делаете что-то неправильно. Обычно вы издеваетесь над зависимостями тестируемой системы, но реже - зависимостями зависимостей зависимостей тестируемой системы. –