泽西岛测试中的不同行为

时间:2015-05-25 12:56:24

标签: java web-services jersey

我有一个使用Jersey实现的服务,可以从JSON文件写入/读取,我有一个测试文件扩展JerseyTest类来测试该服务。

我想要做的是在运行测试时,它在另一个文件中写入/读取(名称中带有“_test”)。这样我就没有从主文件中更改值了。

该文件正在@PostConstruct方法中实例化,如下所示:

@PostConstruct
public void init() {
    try {
        jsonFile = new NewsJson(); // Need to have a different behavior for testing
    } catch (IOException ioe) {
        LOGGER.error("Error creating file: " + ioe.getMessage());
    }
}

我试过的是调用一个修改jsonFile变量的@POST方法,在另一个文件中激活写入。该解决方案中的问题是每个请求都会调用@PostConstruct方法。

我该如何改变这种行为?是否有使用Jersey初始化服务的不同注释?

2 个答案:

答案 0 :(得分:0)

并添加到我的评论中,因为这看起来像答案:

如果你真的想让它只在一次改变范围后构建到@Scope(" singleton"),这将导致球衣" bean"实例化一次而不是按请求。

答案 1 :(得分:0)

我得到了一个可接受的解决方案。为每个请求添加标头参数的想法帮了很大忙。我创建了一个名为Service的超类,它有一个标题参数,如下所示:

@HeaderParam("testing")
private boolean testing;

之后我创建了一个方法isTesting()来获取此变量的值。所以在我的服务(NewsService)中,我扩展了超类服务,并且在@PostConstruct方法上我做了这个:

if (isTesting()) {
    jsonFile = new NewsJson(NewsJson.TEST_FILE);
} else {
    jsonFile = NoticiaJson();
}

我必须更改的是我的单元测试方法,在请求中添加了一个标头变量:

webResource.header("testing", true)