在jmockit中模拟测试类的私有方法

时间:2014-10-29 19:26:15

标签: java testing junit mocking jmockit

我想使用模拟私有方法测试ProcessServiceImpl类的流程方法:readContentisValidFile以及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并成功注入了它。但我无法模拟测试下的类的私有方法。基于thisthis链接,我尝试使用NonStrictExpectations模拟它们,但它没有任何invoke方法!还有另一种方法吗? (我正在使用jmockit-1.8)

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

1 个答案:

答案 0 :(得分:1)

invoke(...)方法来自mockit.Deencapsulation类。

但我建议模仿private方法。相反,请使用包含有效内容的真实文件进行测试。