簡體   English   中英

在 JGiven 的測試場景中實現測試用例

[英]Implementing test cases in a test scenario of JGiven

提供了一個包含多行的文件,該文件由數據庫中的(接受中的)系統加載。 一個基於 JGiven 的簡單測試場景將檢查文件的行數是否與相應的表行匹配。 maven 測試執行 Java 1.8 中的模型實現,提供以下(第一個輸出):

Test Class: com.testcomp.LoadingTest
 Check Loading Process
   Given that the parameters provided are for an input file ( BRANCH )for a specific date ( 20190105 )was provided
    When the number of file records is calculated
     And the loading is complete
     And the number of table rows loaded is calculated
    Then the no of file records (200) must match the no of table rows (200)

但是,不提供用於加載的文件是一個有效的選項。 因此,我們有兩個測試用例,maven 測試應該提供類似(第二個輸出)的內容:

Test Class: com.testcomp.LoadingTest1
 Check Loading Process
   Given that the parameters provided are for an input file ( BRANCH )for a specific date ( 20190105 )
     And the file exists
    When the number of file records is calculated
     And the loading is complete
     And the number of table rows loaded is calculated
    Then the no of file records (200) must match the no of table rows (200)

Test Class: com.testcomp.LoadingTest2
 Check Loading Process
   Given that the parameters provided are for an input file ( BRANCH )for a specific date ( 20190105 )
     And the file does NOT exist
    Then we check nothing

我們如何結合這兩個測試用例,以便根據文件的存在,我們在任何一種情況下都有一個“通過”測試,知道是否提供了文件? 或者有沒有辦法創建類似於JGiven 本身的 HTML 報告(第三個輸出)的東西:

Test Class: com.testcomp.LoadingTest3
 Check Loading Process
   Given that the parameters provided are for an input file ( BRANCH )for a specific date ( 20190105 )
     And the scenario has 2 cases from which only one may be true
    When checking the file's existence is done
     And for case 1 file existence is TRUE
     And for case 1 the number of file records is calculated
     And for case 1 the loading is complete
     And for case 1 the number of table rows loaded is calculated
     And for case 2 file existence is FALSE
    Then for case 1 the no of file records (200) must match the no of table rows (200)
     And for case 2 we check nothing

一個output的實現如下:

加載測試 Class

public class LoadingTest
    extends ScenarioTest<GivenWeHaveFile2Load, WhenFileAndDatabaseAreChecked, ThenCheckIfNoOfFileLinesMatchesNoOfTableRows> {

    @ScenarioStage
    WhenFileAndDatabaseAreChecked loadingFinishedState;

    @ScenarioStage
    WhenFileAndDatabaseAreChecked databaseState;

    @Test
    public void Check_Loading_Process() {
        given().that_an_input_file_for_a_specific_date_was_provided("BRANCH", "20190105");
        when().the_number_of_file_records_is_calculated();
        loadingFinishedState
                .and().the_loading_is_complete();
        databaseState
                .and().the_number_of_table_rows_loaded_is_calculated();
        then().the_no_of_file_records_must_match_the_no_of_table_rows();
    }
}

GivenWeHaveFile2Load Class

public class GivenWeHaveFile2Load extends Stage<GivenWeHaveFile2Load> {

    @ProvidedScenarioState
    String properFileName;

    @As( "that the parameters provided are for an input file ($) for a specific date ($) was provided" )
    public GivenWeHaveFile2Load that_an_input_file_for_a_specific_date_was_provided(String filenamePrefix, String dateStringYYYYMMDD) {
        properFileName = filenamePrefix + "_" + dateStringYYYYMMDD + ".txt";
        return self();
    }
}

When FileAndDatabaseAreChecked Class

public class WhenFileAndDatabaseAreChecked extends Stage<WhenFileAndDatabaseAreChecked> {

    @ExpectedScenarioState
    String properFileName;

    @ProvidedScenarioState
    int noOfFileRecords;

    @ProvidedScenarioState
    int noOfTableRows;

    // @ExtendedDescription("after we check the number of file lines") // does NOT seem to work..
    public WhenFileAndDatabaseAreChecked the_number_of_file_records_is_calculated() {
        // we'll use properFileName to get noOfFileRecords in the actual implementation
        noOfFileRecords = 200;
        return self();
    }

    public WhenFileAndDatabaseAreChecked the_loading_is_complete() {
        return self();
    }

    public WhenFileAndDatabaseAreChecked the_number_of_table_rows_loaded_is_calculated() {
        noOfTableRows = 200;
        return self();
    }
}

ThenCheckIfNoOfFileLinesMatchesNoOfTableRows Class

public class ThenCheckIfNoOfFileLinesMatchesNoOfTableRows extends Stage<ThenCheckIfNoOfFileLinesMatchesNoOfTableRows> {

    @ExpectedScenarioState
    int noOfFileRecords;

    @ExpectedScenarioState
    int noOfTableRows;

    @ScenarioState
    CurrentStep currentStep;

    public ThenCheckIfNoOfFileLinesMatchesNoOfTableRows the_no_of_file_records_must_match_the_no_of_table_rows () {
        currentStep.setName("the no of file records (" + noOfFileRecords + ") must match the no of table rows (" + noOfTableRows + ")");
        assert(noOfFileRecords == noOfTableRows);
        return self();
    }
}

設計了一種不同的方法來滿足需求:

  • 知道文件是否被提供
  • 根據文件的存在來區分生成的 output

如果文件確實存在,我們可能會有這個(第一個輸出):

Test Class: com.testcomp.LoadingTest
 Check Loading Process
   Given that the parameters provided are for an input file ( BRANCH )for a specific date ( 20190105 )was provided
     And after checking for file existence ( result: true )
    When the number of file records is calculated
     And the loading is complete
     And the number of table rows loaded is calculated
    Then the no of file records (200) must match the no of table rows (200)

如果文件不存在,我們可能會有這個(第二個輸出):

Test Class: com.testcomp.LoadingTest
 Check Loading Process
   Given that the parameters provided are for an input file ( BRANCH )for a specific date ( 20190105 )was provided
     And after checking for file existence ( result: false )
    Then since we have no file it is OK

為實現上述目的,關鍵更改是在GivenWeHaveFile2Load class 中定義after_checking_if_file_exists方法,該方法返回 Boolean 以確保文件存在。 然后可以在LoadingTest class 中檢查結果,並區分為測試結果顯示的“腳本”。 從最初的四 (4) 個類中,只有WhenFileAndDatabaseAreChecked保持原樣。 下面提供了其余三 (3) 個的代碼。

加載測試LoadingTest


public class LoadingTest
    extends ScenarioTest<GivenWeHaveFile2Load, WhenFileAndDatabaseAreChecked, ThenCheckIfNoOfFileLinesMatchesNoOfTableRows> {

    private Boolean fileExists;

    @ScenarioStage
    GivenWeHaveFile2Load CheckingFileExistenceState;

    @ScenarioStage
    WhenFileAndDatabaseAreChecked loadingFinishedState;

    @ScenarioStage
    WhenFileAndDatabaseAreChecked databaseState;

    @ScenarioStage
    ThenCheckIfNoOfFileLinesMatchesNoOfTableRows NoFileProvidedState;

    @Test
    public void Check_Loading_Process() {
        given().that_an_input_file_for_a_specific_date_was_provided("BRANCH", "20190105");
        fileExists = CheckingFileExistenceState
                .and().after_checking_if_file_exists();
        if (fileExists) {
            when().the_number_of_file_records_is_calculated();
            loadingFinishedState
                    .and().the_loading_is_complete();
            databaseState
                    .and().the_number_of_table_rows_loaded_is_calculated();
            then().the_no_of_file_records_must_match_the_no_of_table_rows();
        } else {
            NoFileProvidedState
                    .then().since_we_have_no_file_it_is_OK();
        }
        ;
    }
}

GivenWeHaveFile2Load Class

public class GivenWeHaveFile2Load extends Stage<GivenWeHaveFile2Load> {

    private Boolean fileExists;

    @ProvidedScenarioState
    String properFileName;

    @ScenarioState
    CurrentStep currentStep;

    public Boolean after_checking_if_file_exists() {
        currentStep.setName("after checking for file existence ( result: " + fileExists + " )");
        return fileExists;
    }

    public void setFileExists(Boolean fileExists) {
        this.fileExists = fileExists;
    }

    @As( "that the parameters provided are for an input file ($) for a specific date ($) was provided" )
    public GivenWeHaveFile2Load that_an_input_file_for_a_specific_date_was_provided(String filenamePrefix, String dateStringYYYYMMDD) {
        properFileName = filenamePrefix + "_" + dateStringYYYYMMDD + ".txt";
        this.setFileExists(Boolean.FALSE); // actual file check goes here
        return self();
    }
}

ThenCheckIfNoOfFileLinesMatchesNoOfTableRows Class

public class ThenCheckIfNoOfFileLinesMatchesNoOfTableRows extends Stage<ThenCheckIfNoOfFileLinesMatchesNoOfTableRows> {

    @ExpectedScenarioState
    int noOfFileRecords;

    @ExpectedScenarioState
    int noOfTableRows;

    @ScenarioState
    CurrentStep currentStep;

    public ThenCheckIfNoOfFileLinesMatchesNoOfTableRows the_no_of_file_records_must_match_the_no_of_table_rows () {
        currentStep.setName("the no of file records (" + noOfFileRecords + ") must match the no of table rows (" + noOfTableRows + ")");
        assert(noOfFileRecords == noOfTableRows);
        return self();
    }
    public ThenCheckIfNoOfFileLinesMatchesNoOfTableRows since_we_have_no_file_it_is_OK () {
        assert(Boolean.TRUE);
        return self();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM