首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何利用TestContext和黄瓜注射TestRunner

如何利用TestContext和黄瓜注射TestRunner
EN

Stack Overflow用户
提问于 2018-05-25 08:23:14
回答 2查看 2K关注 0票数 0

我正在使用Citrus测试REST服务。我想将响应中的数据保存起来,以便进行预先操作。根据文档化,我应该为此使用Citrus测试上下文。

我尝试向TestContext注入CitrusResource注释:

代码语言:javascript
复制
@CitrusResource
private TestRunner runner;

@CitrusResource
private TestContext context;


@When("^service sends request to get all orders$")
public void get_Orders() {
    runner.http(action -> action.client(httpClientName)
            .send()
            .get(basePath));   
}

@Then("^Service gets response with preflight id: \"([^\"]*)\"$")
public void verify_Orders(String preflightId) {
        runner.http(action -> action.client(httpClientName)
            .receive()
            .response(HttpStatus.OK)
            .contentType("application/json;charset=UTF-8")
            .extractFromPayload("$[*].styleId", "ids")
            .validate("$[*].styleId", everyItem(not(isEmptyOrNullString())))
            .validate("$[*].styleId", hasItem(preflightId)));

    String ids = context.getVariable("${ids}", String.class);
}

但得到了Null指针异常

代码语言:javascript
复制
1 Scenarios (1 failed)
4 Steps (1 failed, 1 skipped, 2 passed)
0m5.541s

java.lang.NullPointerException

此外,我还尝试在必需的方法中创建新的TestContext

代码语言:javascript
复制
@CitrusResource
private TestRunner runner;

@CitrusResource
private TestContext context;


@When("^service sends request to get all orders$")
public void get_Orders() {
    runner.http(action -> action.client(httpClientName)
            .send()
            .get(basePath));   
}

@Then("^Service gets response with preflight id: \"([^\"]*)\"$")
public void verify_Orders(String preflightId) {
TestContext context = new TestContext();
        runner.http(action -> action.client(httpClientName)
            .receive()
            .response(HttpStatus.OK)
            .contentType("application/json;charset=UTF-8")
            .extractFromPayload("$[*].styleId", "ids")
            .validate("$[*].styleId", everyItem(not(isEmptyOrNullString())))
            .validate("$[*].styleId", hasItem(preflightId)));

    String ids = context.getVariable("${ids}", String.class);
}

得到了

代码语言:javascript
复制
com.consol.citrus.exceptions.CitrusRuntimeException: Unknown variable 'ids'

    at com.consol.citrus.context.TestContext.getVariableObject(TestContext.java:158)
    at com.consol.citrus.context.TestContext.getVariable(TestContext.java:133)
    at com.consol.citrus.context.TestContext.getVariable(TestContext.java:122)

你能帮我一下吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-29 07:21:23

由于未知的原因,注释@CitrusResource不会将TestContext实例注入字段。你可以在下面做个工作。

首先,您需要创建并注入一个柑橘实例。

@CitrusFramework私人柑橘;

然后:

testContext = citrus.createTestContext();

票数 0
EN

Stack Overflow用户

发布于 2018-05-25 11:38:21

我不熟悉Citrus,我也不确定您指的是哪些文档。为了在Cucumber-jvm中的步骤之间共享状态,建议使用依赖注入(DI)。有几种使用黄瓜的DI选项,包括Spring、Guice和PicoContainer。后者是一个轻量级的DI框架,如果不使用不同的DI框架,这可能是最好的选择。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50524697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档