我正在寻找关于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能够提取查询参数。
有任何想法或指示吗?
答案 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;
}
}
我不知道你是否想要更进一步......
希望它可以帮到你, 亨利