亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何從交互中返回值

如何從交互中返回值

翻過高山走不出你 2022-06-04 15:17:24
我有一個從 postgres 數據庫中進行選擇的劇本交互類。我想知道如何使用這個劇本模式返回結果集。我現在嘗試的是將方法“public void performAs(T actor)”的返回類型更改為“public ResultSet performAs(T actor)”但后來我有以下問題:Error:(12, 8) java: jarv.serenity.carnival.interactions.dbRelated.SelectDataBase is not abstract and does not override abstract method <T>performAs(T) in net.serenitybdd.screenplay.PerformableError:(23, 40) java: <T>performAs(T) in jarv.serenity.carnival.interactions.dbRelated.SelectDataBase cannot implement <T>performAs(T) in net.serenitybdd.screenplay.Performable  return type java.sql.ResultSet is not compatible with voidError:(21, 5) java: method does not override or implement a method from a supertype這是類文件package jarv.serenity.carnival.interactions.dbRelated;import jarv.serenity.carnival.dataBaseConection.DataBaseDriver;import jarv.serenity.carnival.model.Users;import net.serenitybdd.screenplay.Actor;import net.serenitybdd.screenplay.Interaction;import net.thucydides.core.annotations.Step;import java.sql.ResultSet;import java.sql.Statement;import static net.serenitybdd.screenplay.Tasks.instrumented;public class SelectDataBase implements Interaction {    private final DataBaseDriver dbDriver;    private ResultSet rs=null;    public SelectDataBase(DataBaseDriver dbDriver) {        this.dbDriver = dbDriver;    }    @Override    @Step("Selecting from DB")    public <T extends Actor> void performAs(T actor) {        try        {            Statement st = dbDriver.getConn().createStatement();            rs = st.executeQuery("SELECT * From users");            dbDriver.disconect();        }        catch(Exception e)        {            dbDriver.disconect();            System.out.println(e);        }    }    public ResultSet getResults(){        return rs;    }    public static Interaction select(DataBaseDriver dbDriver) {        return instrumented(SelectDataBase.class, dbDriver);    }    @Override    public String toString() {        return rs.toString();    }}現在我能夠執行選擇操作但不能檢索結果集。我希望能夠檢索它或讓它返回到使用此交互的任何任務或問題
查看完整描述

1 回答

?
楊__羊羊

TA貢獻1943條經驗 獲得超7個贊

在劇本模式中,交互并不意味著返回值,只是為了在被測系統上執行一些操作。您使用問題來查詢系統的狀態。如果您分享您嘗試解決的整體問題會更容易,但由于您的示例是關于查詢用戶的,您可以進行測試來檢查您是否可以通過 UI 管理頁面將用戶添加到系統:


@Test

public void add_a_user_to_the_system() {


    Actor ada = Actor.named("Ada").describedAs("an admin");


    when(ada).attemptsTo(

            AddANewUser.called("Jack")

    );


    then(ada).should(

            seeThat(KnownUsers.inTheSystem(),

                    contains(hasProperty("name", equalTo(("Jack"))))

            )

    );

}

(在這種情況下,按名稱搜索用戶可能會更有效,但我想讓它接近您的示例)。


為此,您可能有一個AddANewUser使用管理屏幕添加新用戶的類:


class AddANewUser implements Performable {


    public static Performable called(String userName) {

        return instrumented(AddANewUser.class, userName);

    }


    private final String userName;


    AddANewUser(String userName) {

        this.userName = userName;

    }


    @Override

    public <T extends Actor> void performAs(T actor) {

        // Add a new user called userName via the UI

    }

}

然后你會使用一個問題來檢查這個用戶是否存在:


@Subject("known users")

static class KnownUsers implements Question<List<ApplicationUser>> {


  public static KnownUsers inTheSystem() { return new KnownUsers(); }


  @Override

  public List<ApplicationUser> answeredBy(Actor actor) {

      // Query the database and convert the result set to ApplicationUsers

      return ...;

  }

}

您還可以創建一個 Ability 類來集中 JDBC 查詢、憑據等。


查看完整回答
反對 回復 2022-06-04
  • 1 回答
  • 0 關注
  • 141 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號