用于void返回方法的JUnit测试用例策略

时间:2015-03-05 06:27:07

标签: java unit-testing junit void

关于无效返回方法的单元测试案例有很多问题,但没有一个有令人满意的答案。我在系统中测试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方法。

2 个答案:

答案 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