Макет частных методов тестируемого класса в jmockit

Я хочу протестировать метод процесса класса ProcessServiceImpl с насмешливыми частными методами: классы readContent и isValidFile и userService.

@Named("processServiceImpl")
public class ProcessServiceImpl {

    @Inject
    private UserService userService;

    public User process(Long userId, File inputFile) throws InvalidFileException {
        User user = userService.load(userId);
        String fileContent = readContent(inputFile);
        if (isValidFile(fileContent)) {
            User updatedUser = userService.updateUser(user, fileContent);
            return updatedUser;
        } else {
            throw new InvalidFileException();
        }
    }

    private String readContent(File inputFile) {
        //implementation
    }

    private boolean isValidFile(String fileContent) {
        //implementation
    }
}

Я смоделировал UserService и успешно ввел его. но я не могу издеваться над частными методами тестируемого класса. На основе этого и эти ссылки, я пытался издеваться над ними с помощью NonStrictExpectations, но он не любой invoke метод!! Есть ли другой способ сделать это? (Я использую jmockit-1.8)

new NonStrictExpectations(processServiceImpl) {{
    invoke(processServiceImpl, "readContent"); 
    result = "";
}};

person Arya    schedule 29.10.2014    source источник


Ответы (1)


Методы invoke(...) относятся к классу mockit.Deencapsulation.

Но я бы рекомендовал не издеваться над private методами. Вместо этого используйте для своих тестов реальный файл с действительным содержимым.

person Rogério    schedule 29.10.2014
comment
Вы правы в этом конкретном случае использования. Но в сложном частном методе, который зависит от некоторых классов (вызовов методов), я думаю, что не так уж плохо издеваться над ним, а не над всеми зависимыми классами. - person Arya; 29.10.2014
comment
@Rogério, что возможно в 1.48 jmockit? - person spandey; 31.08.2020