单元测试Restlet提取器

时间:2015-03-12 16:46:05

标签: java unit-testing junit restlet

我正在寻找关于Restlet组件的实际单元测试的一些指导,特别是提取器。关于运行JUnit以保留整个端点有很多建议,但是挑剔这不是单元测试,而是集成测试。我真的不想设置一个完整的路由系统和Spring只是为了检查一个提取器对模拟数据存储库。

提取器如下所示:

public class CaseQueryExtractor extends Extractor {

    protected int beforeHandle(Request request, Response response) {
        extractFromQuery("offset", "offset", true);
        extractFromQuery("limit", "limit", true);

        // Stuff happens...

        attributes.put("query", query);
        return CONTINUE;
    }
}

我认为Restlets的优点部分在于其良好的路由模型应该使单元测试变得容易,但我无法弄清楚我需要做些什么来实际练习extractFromQuery和它的朋友,以及我构建查询对象的所有逻辑,没有太多嘲笑,以至于我在针对现实的Web请求丢失测试。

是的,我正在使用Spring,但我不想为此设置整个上下文 - 我没有进行集成测试,因为我还没有真正完成应用程序。我很高兴手动注入,一旦我知道我需要做什么来调用这个方法。

我现在在这里:

public class CaseQueryExtractorTest {

    private class TraceRestlet extends Restlet {
        // Does snothing, but prevents warning shouts
    }

    private CaseQueryExtractor extractor;

    @Before
    public void initialize() {

        Restlet mock = new TraceRestlet();
        extractor = new CaseQueryExtractor();
        extractor.setNext(mock);
    }

    @Test
    public void testBasicExtraction() {

         Reference reference = new Reference();
         reference.addQueryParameter("offset", "5");
         reference.addQueryParameter("limit", "3");
         Request request = new Request(Method.GET, reference);
         Response response = extractor.handle(request);
         extractor.handle(request, response);

         CaseQuery query = (CaseQuery) request.getAttributes().get("query");
         assertNotNull(query);
     }
}

当然失败了,因为无论我做什么设置都不足以让Restlets能够提​​取查询参数。

有任何想法或指示吗?

1 个答案:

答案 0 :(得分:0)

Restlet中有一个测试模块可以为您提供有关单元测试的一些提示。请参阅https://github.com/restlet/restlet-framework-java/tree/master/modules/org.restlet.test/src/org/restlet/test

您可以查看课程HeaderTestCase(请参阅https://github.com/restlet/restlet-framework-java/blob/master/modules/org.restlet.test/src/org/restlet/test/HeaderTestCase.java)。

有关信息,如果您使用请求中的属性,您的单元测试将通过;-)请参阅下文:

public class CaseQueryExtractor extends Extractor {

    protected int beforeHandle(Request request, Response response) {
        extractFromQuery("offset", "offset", true);
        extractFromQuery("limit", "limit", true);

        // Stuff happens...

        CaseQuery query = new CaseQuery();

        Map<String,Object> attributes = request.getAttributes();
        attributes.put("query", query);
        return CONTINUE;
    }
}

我不知道你是否想要更进一步......

希望它可以帮到你, 亨利