关于无效返回方法的单元测试案例有很多问题,但没有一个有令人满意的答案。我在系统中测试void返回方法时也遇到了同样的问题。 如何确定应该使用哪种策略来检查此类方法?在我的案例中,代码段是这样的:
public class MyRequestLogger {
private static final Logger logger_request = LogManager.getLogger("requestLogger");
/**
* @param myRequest
*/
public static void logMyRequest(MyRequest myRequest) {
LogFormatter lf = new LogFormatter();
lf.addField(myRequest.getVisitorId());
lf.addField(myRequest.getRequestIdString());
lf.addField(myRequest.getIpAddress());
GeoLocation geoLocation = myRequest.getGeoLocation();
if (geoLocation == null) {
//Adding blank object to keep the logging consistent
geoLocation = new GeoLocation();
}
lf.addField(geoLocation.getCountry());
lf.addField(geoLocation.getState());
lf.addField(geoLocation.getCity());
lf.addField(myRequest.getWebsiteUrl());
lf.addField(myRequest.getPage());
lf.addField(StringUtils.join(myRequest.getCategories(), ','));
lf.addField(myRequest.getUserAgent());
lf.addField(StringUtils.join(myRequest.getKeywords(), ','));
lf.addField(StringUtils.join(myRequest.getCustomParamsFromRequest(), ','));
lf.addField(StringUtils.join(myRequest.getAdspaceIds(), ','));
logger_request.info(lf.toString());
}
我必须测试静态的logMyRequest方法。
答案 0 :(得分:0)
可能有两种方法:
1)将它放在试试中
try{
logMyRequest(myRequest);
assert(true);
}catch(Exception e){
e.printStackTrace();
assert(false);
}
这不是很好,因为没有错误并不一定意味着一切都按预期工作。
2)您必须阅读目的地以检查您的请求是否确实按预期记录。即具有预期的值和格式。现在这也不理想,因为您编写了额外的逻辑来读取实际方法记录的消息,并且可能本身不正确。
所以这是你必须做出的选择。
答案 1 :(得分:0)
如果您的记录器正在写入默认控制台,您可以将System.out
流重定向到字符串以验证打印结果。
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos);
System.setOut(ps);
System.out.println("test");
String output = baos.toString();
//output should now contain "test".
//do your asserts to the output