Макет поля stati c с помощью EasyMock - PullRequest
0 голосов
/ 09 июля 2020

У меня есть такой класс:

class Util {
    
    @Autowired
    static DbService service;
    
    public static Data formatData() {
        Data data=service.getData();
        //some logic here
    }
    
    public static void initService() {
        if(service==null){
            service=ObjectLocation.getObject(DbService .class);
        }
    }
}

Мне нужно высмеять service с помощью EasyMock. EasyMock.createMock() с последующим replay() не работает. PS: Это устаревший код, написанный другим разработчиком, и мы не можем здесь его изменить.

1 Ответ

0 голосов
/ 10 июля 2020

Учитывая объем service, предполагая, что тест находится в том же пакете, вы можете сделать следующее.

public class UtilTest {

    @Test
    public void formatData() {
        DbService service = mock(DbService.class);
        Data expected = new Data();
        expect(service.getData()).andReturn(expected);
        replay(service);

        Util.service = service;

        assertSame(expected, Util.formatData());

        verify(service);
    }
    
}

Если по какой-то причине тест не находится в том же пакете, просто заменить Util.service = service; на

Field field = Util.class.getDeclaredField("service");
field.setAccessible(true);
field.set(null, service);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...