在jmockit中模拟被测试类的私有方法
问题描述:
我想用类似私有方法测试ProcessServiceImpl
类的过程方法:readContent
和isValidFile
和userService
类。在jmockit中模拟被测试类的私有方法
@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
并成功注入。但我不能在测试下嘲笑这个班级的私人方法。基于this和this链接我试图嘲笑他们与NonStrictExpectations
,但它没有任何invoke
方法!有没有另一种方法来做到这一点? (我使用jmockit-1.8)
new NonStrictExpectations(processServiceImpl) {{
invoke(processServiceImpl, "readContent");
result = "";
}};
答
的invoke(...)
方法是从mockit.Deencapsulation
类。
但我会推荐而不是模拟private
方法。相反,请使用包含有效内容的真实文件进行测试。
在这个特定的用例中你是对的。但是在一个依赖于某些类(方法调用)的复杂私有方法中,我认为嘲笑它并不是很糟糕,而不是嘲笑所有的依赖类。 – united 2014-10-29 20:44:03