Mockito Mock run Autowired класса Object

У меня ниже класс сценарий. Во время тестирования MyTestableClass я хочу обработать класс Autowired. Я хотел бы издеваться только над переменной в классе AutoWired.

образец класса, как показано ниже

public class MyTestableClass {

    @Autowired
    private MyServiceClass service;

    public void handleError(){
    ...
    service.doSomething();

    }
}

public class MyServiceClass {

    @Autowired
    private JMSChannel channel;

    public void doSomething(){
        System.out.println("Inside Service class");
        .....
        channel.isAvailable();
        .....   
    }
}

@RunWith(MockitoJUnitRunner.class)
public class  MyTestableClassTest {
    private MyTestableClass  testClass= new MyTestableClass();

    private JMSChannel channel;

    @Before
    public void init(){
     channel= mock(JMSChannel.class);
     when(channel.isAvailable()).thenReturn(Boolean.TRUE);  
    }

    @Test
    public void test(){
        testClass.handleError();
    }
}

Например, консоль должна дать мне "Внутренний класс обслуживания" перед возвратом true.

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

1 ответ

Вам нужно создать и экземпляр вашего сервиса (или макет его) и установить его канал на ваш смоделированный, а затем установить MyTestableClass#service к этому. Что-то вроде:

@Before
public void init(){
    channel= mock(JMSChannel.class);
    when(channel.isAvailable()).thenReturn(Boolean.TRUE); 
    MyServiceClass service = new MyServiceClass();
    ReflectionTestUtils.setField(service, "channel", channel);
    myTestableClass = new MyTestableClass();
    ReflectionTestUtils.setField(myTestableClass, "service", service);
}

с ReflectionTestUtils из весеннего теста (Примечание: вместо этого вы можете использовать сеттер)

Другие вопросы по тегам