首页 > 解决方案 > 放心 - 我不能将一个变量从一种方法传递给另一种方法

问题描述

我对放心和 Java 还是很陌生,我试图从一种方法(或测试用例)到另一种方法(或测试用例)中获取一个变量,并且我一直得到“null”。

我尝试了很多不同的东西,但我一直收到错误。基本上,我想要的是从测试“getTweet”中获取“id”并将其传递给测试“deleteTweet”。任何帮助将不胜感激。

import io.restassured.RestAssured;
import io.restassured.path.json.JsonPath;
import io.restassured.response.Response;
import static io.restassured.RestAssured.given;

import org.testng.annotations.Test;



public class twitterTesting {


    String consumerKey = consumer;
    String consumerSecret = secretConsumer;
    String accessToken = token;
    String accessSecret = secretToken;
    String tweetText = "Never give up!";
    String id;



    @Test
    public void createTweet() {
        RestAssured.baseURI = "https://api.twitter.com/1.1/statuses";
        given().
                auth().oauth(consumer, secretConsumer, token, secretToken).
                queryParam("status", tweetText).
                when().post("/update.json").
                then().assertThat().statusCode(200);



    }

   @Test
    public void getTweet() {
        RestAssured.baseURI = "https://api.twitter.com/1.1/statuses";
        Response res2 = given().
                        auth().oauth(consumerKey, consumerSecret, accessToken, accessSecret).
                        queryParam("count", "1").
                        when().get("/home_timeline.json").
                        then().assertThat().statusCode(200).
                        and().extract().response();
        JsonPath jsonResponse = resources.rawToJson(res2);
        String text = jsonResponse.getString("text");
        id = jsonResponse.getString("id");
        System.out.println(id);
        //System.out.println("/destroy/" + (id.substring(1, id.length()-1) + ".json"));
        String textModified = text.substring(1, text.length()-1);
        System.out.println(textModified);
        System.out.println(tweetText);

        assert text.contains(tweetText); //true
    }

    @Test
    public void deleteTweet() {
        System.out.println("/destroy/" + id + ".json");

    }
}

在将 id 变量发送到“deleteTweet”测试用例时,我不断收到 /destroy/null.json。

标签: javarestintellij-idea

解决方案


每次运行测试时,您都会得到一个新对象,这主要是设计使然;测试应该彼此独立。这样做的好处是您可以单击一个(失败的)测试并再次运行该测试,而且,这意味着您不需要定义测试的运行顺序。

因此,测试类基本上不应该有字段。摆脱所有这些。

然后“修复” deleteTweet,创建一个(通常不标有@Test!)方法,可能称为 getTweet(通常,测试方法称为 testDeleteTweet 或类似的,而不是 deleteTweet),并从 deleteTweet 调用它。

如果您必须使用现场材料,您可以这样做;有@BeforeTest,您可以放置​​一个方法:该方法将在每次测试中执行,并且该方法可以为您填充“id”字段。但这确实意味着每个测试方法都会调用该方法,甚至是不需要它的测试方法。


推荐阅读