Concordion - 快速指南



Concordion - 概述

什麼是 Concordion?

Concordion 是一款功能強大的工具,用於在基於 Java 的專案中編寫和管理自動驗收測試。它直接整合到 JUnit 框架中,使其能夠與所有流行的基於 JAVA 的 IDE(如 Netbeans、Eclipse、IntelliJ IDEA)一起使用。

主動軟體規範

主動軟體規範是一種指定功能行為的方法。它還提供了一種透過與正在開發的系統建立連線來實現和驗證軟體規範的方法。

Concordion 中的主動規範分為兩個部分

  1. 使用 XHTML 編寫的簡潔明瞭的需求文件,其中描述了所需的用 XHTML 編寫的功能。基於 XHTML 的規範包含對使用驗收測試示例提供的功能的描述。示例資料使用簡單的 HTML 標籤標記。

  2. 驗收測試是用 Java 語言編寫的,稱為夾具程式碼。使用標準 JUnit 測試用例的 Concordion 擴充套件,實現測試。夾具程式碼負責查詢由標籤標記的示例資料,並使用它們來驗證正在開發的軟體。

Cncordion 的輸出

當執行 Concordion 主動規範測試時,輸出 XHTML 檔案將顯示原始規範和測試結果。成功的測試將以“綠色”突出顯示,失敗的測試將以“紅色”突出顯示。由於系統中的任何更改都將導致測試失敗,這有助於識別需要更新的規範,因此 Concordion 將這些規範稱為主動規範。因此,規範始終是最新的。

主要特徵

以下是 Concordion 的主要功能

  • 規範作為文件 - Concordion 規範具有很強的可讀性,可以用作活動的系統文件。由於基於 Concordion 的規範是用 HTML 編寫的,因此這些文件可以超連結。

  • 規範是活躍的 - Concordion 規範包含針對系統執行的行為工作示例。規範使用顏色編碼,以便任何人都可以檢視示例是否有效。定期執行 Concordion 規範使文件保持最新。

  • 將“什麼?”與“如何?”分開 - Concordion 規範有助於維護系統實現和所需行為之間的分離。它提供了以後可以更改實現的靈活性。

  • 易於學習 - Concordion 庫的設計旨在縮短學習曲線並使其簡潔。它只有很少的命令需要學習,並且示例使用 JUnit 測試自動化,以便可以輕鬆執行測試並輕鬆地整合到現有專案中。

  • 強大的自定義功能 - Concordion 提供擴充套件 API,允許新增功能。例如,可以使用 Excel 電子表格作為規範,可以將螢幕截圖新增到輸出中,可以顯示日誌資訊等等。

Concordion - 環境設定

本教程將指導您如何準備開發環境以開始使用 Spring Framework 的工作。本教程還將教您如何在設定 Spring Framework 之前在您的機器上設定 JDK、Tomcat 和 Eclipse。

步驟 1 - 設定 Java 開發工具包 (JDK)

您可以從 Oracle 的 Java 網站下載最新版本的 SDK:Java SE 下載。您將在下載的檔案中找到安裝 JDK 的說明,請按照給定的說明安裝和配置設定。最後,設定 PATH 和 JAVA_HOME 環境變數以引用包含 java 和 javac 的目錄,通常分別為 java_install_dir/bin 和 java_install_dir。

如果您正在執行 Windows 並將 JDK 安裝在 C:\jdk1.7.0_75 中,則需要在 C:\autoexec.bat 檔案中新增以下行。

set PATH=C:\jdk1.7.0_75\bin;%PATH%
set JAVA_HOME=C:\jdk1.7.0_75

或者,在 Windows NT/2000/XP 上,您也可以右鍵單擊“我的電腦”,選擇“屬性”,然後選擇“高階”,然後選擇“環境變數”。然後,您將更新 PATH 值並按下“確定”按鈕。

在 Unix(Solaris、Linux 等)上,如果 SDK 安裝在 /usr/local/jdk1.7.0_75 中並且您使用的是 C shell,則需要將以下內容放入您的 .cshrc 檔案中。

setenv PATH /usr/local/jdk1.7.0_75/bin:$PATH
setenv JAVA_HOME /usr/local/jdk1.7.0_75

或者,如果您使用整合開發環境 (IDE),如 Borland JBuilder、Eclipse、IntelliJ IDEA 或 Sun ONE Studio,請編譯並執行一個簡單的程式以確認 IDE 知道您安裝 Java 的位置,否則請按照 IDE 的給定文件進行正確的設定。

步驟 2 - 設定 Eclipse IDE

本教程中的所有示例都是使用 Eclipse IDE 編寫的。因此,我建議您應該在您的機器上安裝最新版本的 Eclipse。

要安裝 Eclipse IDE,請從http://www.eclipse.org/downloads/下載最新的 Eclipse 二進位制檔案。下載安裝程式後,將二進位制分發版解壓縮到一個方便的位置。例如,在 Windows 上的 C:\eclipse 中,或在 Linux/Unix 上的 /usr/local/eclipse 中,最後適當地設定 PATH 變數。

可以透過在 Windows 機器上執行以下命令來啟動 Eclipse,或者您只需雙擊 eclipse.exe

 %C:\eclipse\eclipse.exe

可以透過在 Unix(Solaris、Linux 等)機器上執行以下命令來啟動 Eclipse

$/usr/local/eclipse/eclipse

成功啟動後,如果一切正常,則應顯示以下結果

Eclipse Home page

步驟 3:下載 Junit 檔案

http://www.junit.org下載最新版本的 JUnit jar 檔案。在撰寫本教程時,我下載了Junit-4.10.jar並將其複製到 C:\>JUnit 資料夾中。

作業系統檔案名稱
Windowsjunit4.10.jar
Linuxjunit4.10.jar
Macjunit4.10.jar

步驟 4:設定 JUnit 環境

設定JUNIT_HOME環境變數以指向 JUNIT jar 儲存在您機器上的基本目錄位置。假設,我們已將 junit4.10.jar 儲存在各個作業系統的 JUNIT 資料夾中,如下所示。

作業系統輸出
Windows將環境變數 JUNIT_HOME 設定為 C:\JUNIT
Linuxexport JUNIT_HOME=/usr/local/JUNIT
Macexport JUNIT_HOME=/Library/JUNIT

步驟 5:設定 CLASSPATH 變數

設定CLASSPATH環境變數以指向 JUNIT jar 位置。假設,我們已將 junit4.10.jar 儲存在各個作業系統的 JUNIT 資料夾中,如下所示。

作業系統輸出
Windows將環境變數 CLASSPATH 設定為 %CLASSPATH%;%JUNIT_HOME%\junit4.10.jar;.;
Linuxexport CLASSPATH=$CLASSPATH:$JUNIT_HOME/junit4.10.jar:.
Macexport CLASSPATH=$CLASSPATH:$JUNIT_HOME/junit4.10.jar:.

步驟 6 - 設定 Concordion 庫

現在,如果一切正常,則可以繼續設定您的 Concordion 庫。以下是下載並在您的機器上安裝框架的簡單步驟。

http://dl.bintray.com/concordion/downloads/concordion-1.5.1.zip.下載最新版本的 Concordion 框架二進位制檔案。

在撰寫本教程時,我在我的 Windows 機器上下載了 concordion-1.5.1,當您解壓縮下載的檔案時,它將在 E:\concordion-1.5.1 中為您提供以下目錄結構。

  • lib - 庫資料夾

    • hamcrest-core-1.3.jar

    • junit-4.12.jar

    • ognl-2.6.9.jar

    • xom-1.2.5.jar

  • src - 原始碼資料夾

    • main

    • test

    • test-dummies

  • concordion-1.5.1.jar

您將在 E:\concordion\lib 目錄中找到所有 Concordion 依賴庫。確保您正確設定了此目錄上的 CLASSPATH 變數,否則在執行應用程式時會出現問題。如果您使用的是 Eclipse,則不需要設定 CLASSPATH,因為所有設定都將透過 Eclipse 完成。

完成最後一步後,您就可以繼續進行第一個 Concordion 示例,您將在下一章中看到。

Concordion - 第一個應用程式

讓我們開始使用 Concordion 進行程式設計。在開始使用 Concordion 編寫您的第一個示例之前,您必須確保已正確設定您的 Concordion 環境,如Concordion - 環境設定教程中所述。我們還假設您對 Eclipse IDE 有一定的瞭解。

因此,讓我們繼續編寫一個簡單的 Concordion 應用程式,該應用程式將列印以下驗收測試 -

Example
When Robert logs in the system, a greeting "Hello Robert!" is displayed.

步驟 1 - 建立 Java 專案

第一步是使用 Eclipse IDE 建立一個簡單的 Java 專案。按照選項檔案→新建→專案,最後從嚮導列表中選擇Java 專案嚮導。現在使用嚮導視窗將您的專案命名為Concordion,如下所示 -

concordion Wizard

成功建立專案後,您的專案資源管理器中將包含以下內容 -

Concordion Directories

步驟 2 - 新增所需的庫

讓我們將 concordion 及其依賴項新增到我們的專案中。為此,右鍵單擊您的專案名稱concordion,然後按照上下文選單中提供的選項:構建路徑→配置構建路徑以顯示 Java 構建路徑視窗,如下所示 -

Java Build Path

現在,使用選項卡下提供的新增外部 JAR按鈕,從 Concordion 資料夾新增以下核心 JAR。

  • concordion-1.5.1
  • hamcrest-core-1.3
  • junit-4.12
  • ognl-2.6.9
  • xom-1.2.5

步驟 3 - 建立原始檔

現在讓我們在concordion專案下建立實際的原始檔。首先,我們需要建立一個名為com.tutorialspoint的包。為此,右鍵單擊包資源管理器部分中的src,然後按照選項:新建→包

接下來,我們將在 com.tutorialspoint 包下建立 System .java 檔案。

concordion Source Files

以下是System.java檔案的內容 -

package com.tutorialspoint;

public class System {
   public String getGreeting(String userName){
      return "Hello " + userName + "!";
   }
}

步驟 4 - 建立規範檔案

現在讓我們在concordion專案下建立實際的規範檔案。首先,我們需要建立一個名為specs的新原始檔夾。此資料夾將包含規範檔案,如 JUnitFixture 或測試執行器以及作為規範的 html 檔案。現在我們需要建立一個名為specs.tutorialspoint的包。為此,右鍵單擊包資源管理器部分中的spec,然後按照選項:新建→包

接下來,我們將在 specs.tutorialspoint 包下建立System.htmlSystemFixture.java檔案。然後,我們將在 specs 原始檔夾下新增concordion.css

concordion Specs Files

以下是System.html檔案的內容 -

<html xmlns:concordion = "http://www.concordion.org/2007/concordion">
   <head>
      <link href = "../concordion.css" rel = "stylesheet" type="text/css" />
   </head>

   <body>
      <h1>System Specifications</h1>
      <p>We are building specifications for our online order tracking application.</p>
      <p>Following is the requirement to show greeting to logged in user:</p>
      <div class = "example">      
         <h3>Example</h3>
         <p>When <span concordion:set = "#userName">Robert</span> 
            logs in the system, a greeting "<span concordion:assertEquals = "getGreeting(#userName)">
            Hello Robert!</span>" is displayed.</p>
      </div>
   </body>

</html>

以下是SystemFixture.java檔案的內容 -

package specs.tutorialspoint;

import com.tutorialspoint.System;
import org.concordion.integration.junit4.ConcordionRunner;
import org.junit.runner.RunWith;

@RunWith(ConcordionRunner.class)

public class SystemFixture {

   System system = new System();
	
   public String getGreeting(String userName){
      return system.getGreeting(userName);
   }
}

以下是concordion.css檔案的內容 -

* {
   font-family: Arial;
}

body {
   padding: 32px;  
}

pre {
   padding: 6px 28px 6px 28px;
   background-color: #E8EEF7;
}

pre, pre *, code, code *, kbd {
   font-family: Courier New, Courier;
   font-size: 10pt;
}

h1, h1 * {
   font-size: 24pt;	
}

p, td, th, li, .breadcrumbs {
   font-size: 10pt;
}

p, li {
   line-height: 140%;
}

table {
   border-collapse: collapse;
   empty-cells: show;
   margin: 8px 0px 8px 0px;
}

th, td {
   border: 1px solid black;
   padding: 3px;
}

td {
   background-color: white;
   vertical-align: top;
}

th {
   background-color: #C3D9FF;
}

li {
   margin-top: 6px;
   margin-bottom: 6px; 
}

.example {
   padding: 6px 16px 6px 16px;
   border: 1px solid #D7D7D7;
   margin: 6px 0px 28px 0px;
   background-color: #F7F7F7;
}

.example h3 {
   margin-top: 8px;
   margin-bottom: 8px;
   font-size: 12pt;
}

.special {
  font-style: italic;
}

.idea {
  font-size: 9pt;
  color: #888;
  font-style: italic;	
}

.tight li {
  margin-top: 1px;
  margin-bottom: 1px; 
}

.commentary {
  float: right;
  width: 200px;
  background-color: #ffffd0;
  padding:8px;
  border: 3px solid #eeeeb0;	 
  margin: 10px 0px 10px 10px;	 
}

.commentary, .commentary * {
  font-size: 8pt;
}

關於規範 html 檔案和測試夾具,需要注意兩點 -

  • System.html 是使用 concordion 名稱空間的規範 html 檔案。

<html xmlns:concordion="http://www.concordion.org/2007/concordion">
  • System.html 使用 concordion:set 命令將臨時變數 userName 的值設定為 Robert。這裡,userName 是要傳遞給 System fixture 的 getGreeting 方法的引數。

When <span concordion:set="#userName">Robert</span> logs in the system
  • System.html 使用 concordion:assertEquals 命令檢查 getGreeting(userName) 函式的輸出是否為 Hello Robert!。

a greeting "<span concordion:assertEquals="getGreeting(#userName)">
Hello Robert!</span>" is displayed.
  • SystemFixture 是一個使用 ConcordionRunner.class 註解的 JUnit 測試 fixture。

@RunWith(ConcordionRunner.class)
public class SystemFixture {
  • SystemFixture 具有一個 getGreeting 方法,該方法返回對使用者的問候。

public String getGreeting(String userName){
   return system.getGreeting(userName);
}

步驟 5 - 執行程式

右鍵單擊 SystemFixture 的內容區域,然後選擇以...方式執行 > JUnit 測試用例。您將看到以下輸出,並且 junit 成功。

C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\concordion\specs\tutorialspoint\System.html
Successes: 1, Failures: 0

System.html 是 Concordion 測試執行的輸出。

concordion Output

恭喜您,您已成功建立了第一個 Concordion 驗收測試。此外,讓我們在接下來的幾章中開始做一些更有趣的事情。

Concordion - set 命令

Concordion set 命令用於儲存可以在其他 Concordion 命令中使用的臨時變數。

考慮以下需求 -

The Sum of two numbers 2 and 3 will be 5.

如果我們希望將數字 2 和 3 作為引數,並將它們作為引數傳遞給 sum 函式,以便可以根據系統返回的結果對其進行驗證,那麼我們可以在數字周圍的 span 標籤內使用 concordion:set 命令。

<p>The Sum of two numbers <span concordion:set = "#firstNumber">2</span> 
   and <span concordion:set = "#secondNumber">3</span> will be 
   <span concordion:assertEquals = "sum(#firstNumber, #secondNumber)">5
   </span>.</p>

當 Concordion 解析文件時,它將設定一個臨時變數 #firstNumber 為值“2”,並將 #secondNumber 設定為值“3”,然後使用 #firstNumber 和 #secondNumber 作為引數呼叫 sum() 方法,並檢查結果是否等於“5”。

示例

讓我們準備好一個正在執行的 Eclipse IDE,並按照以下步驟建立 Concordion 應用程式 -

步驟 描述
1 建立一個名為 concordion 的專案,並在建立的專案中 src 資料夾下建立一個名為 com.tutorialspoint 的包。
2 使用新增外部 JAR 選項新增所需的 Concordion 庫,如Concordion - 第一個應用程式章節中所述。
3 com.tutorialspoint 包下建立 Java 類 System
4 specs.tutorialspoint 包下建立 Fixture 類 SystemFixture
5 specs.tutorialspoint 包下建立規範 html System.html
6 最後一步是建立所有 Java 檔案和規範檔案的內容,並按照以下說明執行應用程式。

以下是 System.java 檔案的內容 -

package com.tutorialspoint;
public class System {
   public int sum(int firstNumber, int secondNumber) {
      return firstNumber + secondNumber;
   }
}

以下是 SystemFixture.java 檔案的內容 -

package specs.tutorialspoint;

import org.concordion.integration.junit4.ConcordionRunner;
import org.junit.runner.RunWith;
import com.tutorialspoint.System;

@RunWith(ConcordionRunner.class)

public class SystemFixture {
   System system = new System();
   public int sum(int firstNumber, int secondNumber) {
      return system.sum(firstNumber, secondNumber);
   }
}

以下是 System.html 檔案的內容 -

<html xmlns:concordion = "http://www.concordion.org/2007/concordion">
   <head>
      <link href = "../concordion.css" rel = "stylesheet" type = "text/css" />
   </head>

   <body>
      <h1>Calculator Specifications</h1>
      <p>We are building online calculator support in our website.</p>
      <p>Following is the requirement to add two numbers:</p>
		
      <div class = "example">
         <h3>Example</h3>
         <p>The Sum of two numbers <span concordion:set = "#firstNumber">2</span> 
            and <span concordion:set = "#secondNumber">3</span> will be 
            <span concordion:execute = "#result = sum(#firstNumber, #secondNumber)"></span>
            <span concordion:assertEquals = "#result">5</span>.</p>
      </div>
   </body>

</html>

完成原始檔和規範檔案的建立後,讓我們以 JUnit 測試的方式執行應用程式。如果您的應用程式一切正常,它將產生以下結果 -

C:\DOCUME>1\ADMINI>1\LOCALS>1\Temp\concordion\specs\tutorialspoint\System.html
Successes: 1, Failures: 0

System.html 是 concordion 測試執行的輸出。

concordion Output

Concordion - assertEquals 命令

Concordion assertEquals 命令用於檢查 Java bean 屬性或方法結果是否與指定值匹配。

考慮以下需求 -

The sum of two numbers 2 and 3 will be 5.

如果我們希望將數字 2 和 3 作為引數,並將它們作為引數傳遞給 sum 函式,以便可以根據系統返回的結果 5 對其進行驗證,那麼我們可以在 sum 函數週圍的 span 標籤內使用 concordion:assertEquals 命令。

<p>The Sum of two numbers <span concordion:set="#firstNumber">2</span> 
   and  <span concordion:set="#secondNumber">3</span> will be 
   <span concordion:assertEquals="sum(#firstNumber, #secondNumber)">5</span>.</p>

當 Concordion 解析文件時,它將使用 set 命令設定一個臨時變數 #firstNumber 為值“2”,並將 #secondNumber 設定為值“3”,然後使用 #firstNumber 和 #secondNumber 作為引數呼叫 sum() 方法,並使用 assertEquals 命令檢查結果是否等於“5”。

示例

讓我們準備好一個正在執行的 Eclipse IDE,並按照以下步驟建立 Concordion 應用程式 -

步驟 描述
1 建立一個名為 concordion 的專案,並在建立的專案中 src 資料夾下建立一個名為 com.tutorialspoint 的包。
2 使用新增外部 JAR 選項新增所需的 Concordion 庫,如Concordion - 第一個應用程式章節中所述。
3 com.tutorialspoint 包下建立 Java 類 System
4 specs.tutorialspoint 包下建立 Fixture 類 SystemFixture
5 specs.tutorialspoint 包下建立規範 html System.html
6 最後一步是建立所有 Java 檔案和規範檔案的內容,並按照以下說明執行應用程式。

以下是 System.java 檔案的內容 -

package com.tutorialspoint;
public class System {
   public int sum(int firstNumber, int secondNumber) {
      return firstNumber + secondNumber;
   }
}

以下是 SystemFixture.java 檔案的內容 -

package specs.tutorialspoint;

import org.concordion.integration.junit4.ConcordionRunner;
import org.junit.runner.RunWith;
import com.tutorialspoint.System;

@RunWith(ConcordionRunner.class)

public class SystemFixture {
   System system = new System();
   public int sum(int firstNumber, int secondNumber) {
      return system.sum(firstNumber, secondNumber);
   }
}

以下是 System.html 檔案的內容 -

<html xmlns:concordion = "http://www.concordion.org/2007/concordion">
   <head>
      <link href = "../concordion.css" rel = "stylesheet" type = "text/css" />
   </head>

   <body>
      <h1>Calculator Specifications</h1>
      <p>We are building online calculator support in our website.</p>
      <p>Following is the requirement to add two numbers:</p>
		
      <div class = "example">
         <h3>Example</h3>
         <p>The Sum of two numbers <span concordion:set = "#firstNumber">2</span> 
            and  <span concordion:set = "#secondNumber">3</span> will be 
            <span concordion:assertEquals = "sum(#firstNumber, #secondNumber)">5</span>.</p>
      </div>
		
   </body>

</html>

完成原始檔和規範檔案的建立後,讓我們以 JUnit 測試的方式執行應用程式。如果您的應用程式一切正常,它將顯示以下結果 -

C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\concordion\specs\tutorialspoint\System.html
Successes: 1, Failures: 0

System.html 是 Concordion 測試執行的輸出。

Concordion assertEquals command Output

成功:1,失敗:0

Concordion - assertTrue 命令

當 fixture 需要知道預期結果才能執行測試時,使用 Concordion assertTrue 命令。

考慮以下需求 -

User Name : Robert De
The User name starts with R.
The User name starts with S == false.

如果我們希望對使用者名稱執行測試,並檢查使用者名稱是否以 R 開頭。

<p>User Name :<span concordion:set = "#userName">Robert De</span></p>
<p>The User name <span concordion:assertTrue = "#userName.startsWith(#letter)">starts
   with <b concordion:set = "#letter">R</b></span>.</p>
<p>The User name <span concordion:assertTrue = "#userName.startsWith(#letter)">starts
   with <b concordion:set = "#letter">S</b></span>.</p>   

當 Concordion 解析文件時,它將設定一個臨時變數 #userName 為值“Robert De”。然後,它將檢查 userName 是否以在下一個命令中設定的 #letter 變數指定的字母開頭。

示例

讓我們準備好一個正在執行的 Eclipse IDE,並按照以下步驟建立 Concordion 應用程式 -

步驟 描述
1 建立一個名為 concordion 的專案,並在建立的專案中 src 資料夾下建立一個名為 com.tutorialspoint 的包。
2 使用新增外部 JAR 選項新增所需的 Concordion 庫,如Concordion - 第一個應用程式章節中所述。
3 com.tutorialspoint 包下建立 Java 類 System
4 specs.tutorialspoint 包下建立 Fixture 類 SystemFixture
5 specs.tutorialspoint 包下建立規範 html System.html
6 最後一步是建立所有 Java 檔案和規範檔案的內容,並按照以下說明執行應用程式。

以下是 System.java 檔案的內容 -

package com.tutorialspoint;
public class System {   
}

以下是 SystemFixture.java 檔案的內容 -

package specs.tutorialspoint;

import org.concordion.integration.junit4.ConcordionRunner;
import org.junit.runner.RunWith;

@RunWith(ConcordionRunner.class)

public class SystemFixture {
}

以下是 System.html 檔案的內容 -

<html xmlns:concordion = "http://www.concordion.org/2007/concordion">
   <head>
      <link href = "../concordion.css" rel = "stylesheet" type = "text/css" />
   </head>

   <body>
      <h1>System Specifications</h1>
      <p>We are building specifications for our online order tracking application.</p>
      <p>Following is the requirement to split full name of a logged in user to 
         its constituents by splitting name by whitespace:</p>
   
      <div class = "example">      
         <h3>Example</h3>
         <p>User Name :<span concordion:set = "#userName">Robert De</span></p>
         <p>The User name <span concordion:assertTrue = "#userName.startsWith(#letter)">starts
            with <b concordion:set = "#letter">R</b></span>.</p>
         <p>The User name <span concordion:assertTrue = "#userName.startsWith(#letter)">starts
            with <b concordion:set = "#letter">S</b></span>.</p>          
      </div>
		
   </body>

</html>

完成原始檔和規範檔案的建立後,讓我們以 JUnit 測試的方式執行應用程式。如果您的應用程式一切正常,它將產生以下結果 -

C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\concordion\specs\tutorialspoint\System.html
Successes: 1, Failures: 1

System.html 是 Concordion 測試執行的輸出。

concordion assertTrue command Output

Concordion - assertFalse 命令

當 fixture 需要知道預期結果才能執行測試時,使用 Concordion assertFalse 命令。

考慮以下需求 -

User Name : Robert De
The User name does not start with S.

如果我們希望對使用者名稱執行測試,並檢查使用者名稱不以 S 開頭。

<p>User Name :<span concordion:set = "#userName">Robert De</span></p>
<p>The User name <span concordion:assertFalse = "#userName.startsWith(#letter)">does not start
   with <b concordion:set = "#letter">S</b></span>.</p>  

當 Concordion 解析文件時,它將設定一個臨時變數 #userName 為值“Robert De”。然後,它將檢查 userName 是否以在下一個命令中設定的 #letter 變數指定的字母開頭。

示例

讓我們準備好一個正在執行的 Eclipse IDE,並按照以下步驟建立 Concordion 應用程式 -

步驟 描述
1 建立一個名為 concordion 的專案,並在建立的專案中 src 資料夾下建立一個名為 com.tutorialspoint 的包。
2 使用新增外部 JAR 選項新增所需的 Concordion 庫,如Concordion - 第一個應用程式章節中所述。
3 com.tutorialspoint 包下建立 Java 類 System
4 specs.tutorialspoint 包下建立 Fixture 類 SystemFixture
5 specs.tutorialspoint 包下建立規範 html System.html
6 最後一步是建立所有 Java 檔案和規範檔案的內容,並按照以下說明執行應用程式。

以下是 System.java 檔案的內容 -

package com.tutorialspoint;
public class System {   
}

以下是 SystemFixture.java 檔案的內容 -

package specs.tutorialspoint;

import org.concordion.integration.junit4.ConcordionRunner;
import org.junit.runner.RunWith;

@RunWith(ConcordionRunner.class)

public class SystemFixture {
}

以下是 System.html 檔案的內容 -

<html xmlns:concordion = "http://www.concordion.org/2007/concordion">
   <head>
      <link href = "../concordion.css" rel = "stylesheet" type = "text/css" />
   </head>

   <body>
      <h1>System Specifications</h1>
      <p>We are building specifications for our online order tracking application.</p>
      <p>Following is the requirement to split full name of a logged in user to its 
         constituents by splitting name by whitespace:</p>
			
      <div class = "example">      
         <h3>Example</h3>
         <p>User Name :<span concordion:set = "#userName">Robert De</span></p>
         <p>The User name <span concordion:assertFalse = "#userName.startsWith(#letter)">
            does not start with <b concordion:set = "#letter">
            S</b></span>.</p> 
      </div>
		
   </body>

</html>

完成原始檔和規範檔案的建立後,讓我們以 JUnit 測試的方式執行應用程式。如果您的應用程式一切正常,它將產生以下結果 -

C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\concordion\specs\tutorialspoint\System.html
Successes: 1, Failures: 0

System.html 是 Concordion 測試執行的輸出。

concordion assertFalse command Output

Concordion - execute 命令

Concordion execute 命令用於執行 concordion fixture 的操作。考慮以下需求 -

The sum of two numbers 2 and 3 will be 5.

如果我們想為一個 sum 函式編寫規範,該函式將接受兩個數字並輸出它們的和,則規範如下 -

<p>The Sum of two numbers <span concordion:set = "#firstNumber">2</span> and 
   <span concordion:set = "#secondNumber">3</span> will be
   <span concordion:execute = "#result = sum(#firstNumber, #secondNumber)">
   </span><span concordion:assertEquals = "#result">5</span>.</p>

當 Concordion 解析文件時,它將設定一個臨時變數 #firstNumber 為值“2”,並將 #secondNumber 設定為值“3”,然後使用 #firstNumber 和 #secondNumber 作為引數執行 sum() 方法,使用 execute 命令並將結果設定到 #result 變數中,並檢查 #result 變數是否等於“5”。

示例

讓我們準備好一個正在執行的 Eclipse IDE,並按照以下步驟建立 Concordion 應用程式 -

步驟 描述
1 建立一個名為 concordion 的專案,並在建立的專案中 src 資料夾下建立一個名為 com.tutorialspoint 的包。
2 使用新增外部 JAR 選項新增所需的 Concordion 庫,如Concordion - 第一個應用程式章節中所述。
3 com.tutorialspoint 包下建立 Java 類 System
4 specs.tutorialspoint 包下建立 Fixture 類 SystemFixture
5 specs.tutorialspoint 包下建立規範 html System.html
6 最後一步是建立所有 Java 檔案和規範檔案的內容,並按照以下說明執行應用程式。

以下是 System.java 檔案的內容 -

package com.tutorialspoint;
public class System {
   public int sum(int firstNumber, int secondNumber) {
      return firstNumber + secondNumber;
   }
}

以下是 SystemFixture.java 檔案的內容 -

package specs.tutorialspoint;

import org.concordion.integration.junit4.ConcordionRunner;
import org.junit.runner.RunWith;
import com.tutorialspoint.System;

@RunWith(ConcordionRunner.class)

public class SystemFixture {
   System system = new System();
   public int sum(int firstNumber, int secondNumber) {
      return system.sum(firstNumber, secondNumber);
   }
}

以下是 System.html 檔案的內容 -

<html xmlns:concordion = "http://www.concordion.org/2007/concordion">
   <head>
      <link href = "../concordion.css" rel = "stylesheet" type = "text/css" />
   </head>

   <body>
      <h1>Calculator Specifications</h1>
      <p>We are building online calculator support in our website.</p>
      <p>Following is the requirement to add two numbers:</p>
		
      <div class = "example">
         <h3>Example</h3>
         <p>The Sum of two numbers <span concordion:set = "#firstNumber">2</span> 
            and <span concordion:set = "#secondNumber">3</span> will be 
            <span concordion:execute = "#result = sum(#firstNumber, #secondNumber)">
            </span><span concordion:assertEquals = "#result">5</span>.</p>
      </div>
		
   </body>

</html>

完成原始檔和規範檔案的建立後,讓我們以 JUnit 測試的方式執行應用程式。如果您的應用程式一切正常,它將產生以下結果 -

C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\concordion\specs\tutorialspoint\System.html
Successes: 1, Failures: 0

System.html 是 Concordion 測試執行的輸出。

concordion Execute Command Output

Concordion - 返回物件

Concordion execute 命令可用於以物件的形式獲取行為的結果,我們可以使用該物件獲取行為的多個輸出。例如,考慮以下需求 -

The full name Robert De is to be broken into first name Robert and last name De.

這裡我們需要有一個 split 函式,它接受一個使用者名稱並返回一個結果物件,該物件具有 firstName 和 lastName 作為其屬性,以便我們可以使用它們。

如果我們想為這樣的 split 函式編寫規範,該函式將期望一個使用者名稱並輸出一個結果物件,則以下將是規範 -

<p>The full name <span concordion:execute = "#result = split(#TEXT)">Robert 
   De</span> is to be broken into first name 
   <span concordion:assertEquals = "#result.firstName">Robert</span> and last name 
   <span concordion:assertEquals = "#result.lastName">De</span>.</p>

當 Concordion 解析文件時,它將設定特殊變數 #TEXT 的值為當前元素的值“Robert De”,並將其傳遞給 split 函式。然後,它將使用 #TEXT 作為引數執行 split() 方法,使用 execute 命令並將結果設定到 #result 變數中,並使用結果物件,列印 firstName 和 lastName 屬性作為輸出。

示例

讓我們準備好一個正在執行的 Eclipse IDE,並按照以下步驟建立 Concordion 應用程式 -

步驟 描述
1 建立一個名為 concordion 的專案,並在建立的專案中 src 資料夾下建立一個名為 com.tutorialspoint 的包。
2 使用新增外部 JAR 選項新增所需的 Concordion 庫,如Concordion - 第一個應用程式章節中所述。
3 com.tutorialspoint 包下建立 Java 類 SystemResult
4 specs.tutorialspoint 包下建立 Fixture 類 SystemFixture
5 specs.tutorialspoint 包下建立規範 html System.html
6 最後一步是建立所有 Java 檔案和規範檔案的內容,並按照以下說明執行應用程式。

以下是 Result.java 檔案的內容 -

package com.tutorialspoint;
public class Result {
   private String firstName;
   private String lastName;
	
   public String getFirstName() {
      return firstName;
   }
	
   public void setFirstName(String firstName) {
      this.firstName = firstName;
   }
	
   public String getLastName() {
      return lastName;
   }
	
   public void setLastName(String lastName) {
      this.lastName = lastName;
   } 
}

以下是 System.java 檔案的內容 -

package com.tutorialspoint;
public class System {
   public Result split(String userName){
      Result result = new Result();
      String[] words = userName.split(" ");
      result.setFirstName(words[0]);
      result.setLastName(words[1]);
      return result;
   }
}

以下是 SystemFixture.java 檔案的內容 -

package specs.tutorialspoint;

import com.tutorialspoint.Result;
import com.tutorialspoint.System;
import org.concordion.integration.junit4.ConcordionRunner;
import org.junit.runner.RunWith;

@RunWith(ConcordionRunner.class)

public class SystemFixture {
   System system = new System();
   public Result split(String userName){
      return system.split(userName);
   }  
}

以下是 System.html 檔案的內容 -

<html xmlns:concordion = "http://www.concordion.org/2007/concordion">
   <head>
      <link href = "../concordion.css" rel = "stylesheet" type = "text/css" />
   </head>

   <body>
      <h1>System Specifications</h1>
      <p>We are building specifications for our online order tracking application.</p>
      <p>Following is the requirement to split full name of a logged in user to its 
         constituents by splitting name by whitespace:</p>
			
      <div class = "example">      
         <h3>Example</h3>
         <p>The full name <span concordion:execute = "#result = split(#TEXT)">Robert 
            De</span> is to be broken into first name <span 
            concordion:assertEquals = "#result.firstName">Robert</span> and last name <span 
            concordion:assertEquals = "#result.lastName">De</span>.</p>
      </div>
		
   </body>
	
</html>

完成原始檔和規範檔案的建立後,讓我們以 JUnit 測試的方式執行應用程式。如果您的應用程式一切正常,它將產生以下結果 -

C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\concordion\specs\tutorialspoint\System.html
Successes: 1, Failures: 0

System.html 是 Concordion 測試執行的輸出。

concordion Returning Object Output

Concordion - 返回 Map

Concordion execute 命令可用於以 Map 的形式獲取行為的結果,我們可以使用該 Map 獲取行為的多個輸出。例如,考慮以下需求 -

The full name Robert De is to be broken into its first name Robert and last name De.

這裡我們需要有一個 spilt 函式,它接受一個使用者名稱並返回一個 Map 物件,該物件具有 firstName 和 lastName 作為其鍵,並具有相應的的值,以便我們可以使用它們。

如果我們想為這樣的 split 函式編寫規範,該函式將接受一個使用者名稱並輸出一個結果物件,則以下將是規範 -

<p>The full name <span concordion:execute = "#result = split(#TEXT)">Robert 
   De</span> is to be broken into first name <span 
   concordion:assertEquals = "#result.firstName">Robert</span> and last name <span 
   concordion:assertEquals = "#result.lastName">De</span>.</p>

當 Concordion 解析文件時,它將設定特殊變數 #TEXT 的值為當前元素的值“Robert De”,並將其傳遞給 split 函式。然後,它將使用 #TEXT 作為引數執行 split() 方法,使用 execute 命令並將結果設定到 #result 變數中,並使用結果 Map,列印 firstName 和 lastName 值作為輸出。

示例

讓我們準備好一個正在執行的 Eclipse IDE,並按照以下步驟建立 Concordion 應用程式 -

步驟 描述
1 建立一個名為 concordion 的專案,並在建立的專案中 src 資料夾下建立一個名為 com.tutorialspoint 的包。
2 使用新增外部 JAR 選項新增所需的 Concordion 庫,如Concordion - 第一個應用程式章節中所述。
3 com.tutorialspoint 包下建立 Java 類 System
4 specs.tutorialspoint 包下建立 Fixture 類 SystemFixture
5 specs.tutorialspoint 包下建立規範 html System.html
6 最後一步是建立所有 Java 檔案和規範檔案的內容,並按照以下說明執行應用程式。

以下是 System.java 檔案的內容 -

package com.tutorialspoint;

import java.util.HashMap;
import java.util.Map;

public class System {
   public Map split(String userName){
      Map<String, String> result = new HashMap<String, String>();
      String[] words = userName.split(" ");
      result.put("firstName", words[0]);
      result.put("lastName", words[1]);
      return result;
   }
}

以下是 SystemFixture.java 檔案的內容 -

package specs.tutorialspoint;

import java.util.Map;
import com.tutorialspoint.Result;
import com.tutorialspoint.System;
import org.concordion.integration.junit4.ConcordionRunner;
import org.junit.runner.RunWith;

@RunWith(ConcordionRunner.class)

public class SystemFixture {
   System system = new System();
   public Map<String, String> split(String userName){
      return system.split(userName);
   }  
}

以下是 System.html 檔案的內容 -

<html xmlns:concordion = "http://www.concordion.org/2007/concordion">
   <head>
      <link href = "../concordion.css" rel = "stylesheet" type = "text/css" />
   </head>

   <body>
      <h1>System Specifications</h1>
      <p>We are building specifications for our online order tracking application.</p>
      <p>Following is the requirement to split full name of a logged in user to its 
         constituents by splitting name by whitespace:</p>
			
      <div class = "example">      
         <h3>Example</h3>
         <p>The full name <span concordion:execute = "#result = split(#TEXT)">Robert 
            De</span> is to be broken into first name <span 
            concordion:assertEquals = "#result.firstName">Robert</span> and last name 
            <span concordion:assertEquals = "#result.lastName">De</span>.</p>
      </div>
		
   </body>

</html>

完成原始檔和規範檔案的建立後,讓我們以 JUnit 測試的方式執行應用程式。如果您的應用程式一切正常,它將產生以下結果 -

C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\concordion\specs\tutorialspoint\System.html
Successes: 1, Failures: 0

System.html 是 Concordion 測試執行的輸出。

concordion Returning Map Output

Concordion - 返回 MultiValueResult

Concordion execute 命令可用於以 Map 的形式獲取行為的結果,我們可以使用該 Map 獲取行為的多個輸出。例如,考慮以下需求 -

The full name Robert De is to be broken into its first name Robert and last name De.

這裡我們需要有一個 split 函式,它接受一個使用者名稱並返回一個 Map 物件,該物件具有 firstName 和 lastName 作為其鍵,並具有相應的的值,以便我們可以使用它們。

如果我們想為這樣的 split 函式編寫規範,該函式將接受一個使用者名稱並輸出一個結果物件,則規範如下 -

<p>The full name <span concordion:execute = "#result = split(#TEXT)">Robert 
   De</span> is to be broken into first name 
   <span concordion:assertEquals = "#result.firstName">Robert</span> and last name 
   <span concordion:assertEquals = "#result.lastName">De</span>.</p>

當 Concordion 解析文件時,它將設定特殊變數 #TEXT 的值為當前元素的值“Robert De”,並將其傳遞給 split 函式。然後,它將使用 #TEXT 作為引數執行 split() 方法,使用 execute 命令並將結果設定到 #result 變數中,並使用結果 Map,列印 firstName 和 lastName 值作為輸出。

示例

讓我們準備好一個正在執行的 Eclipse IDE,並按照以下步驟建立 Concordion 應用程式 -

步驟 描述
1 建立一個名為 concordion 的專案,並在建立的專案中 src 資料夾下建立一個名為 com.tutorialspoint 的包。
2 使用新增外部 JAR 選項新增所需的 Concordion 庫,如Concordion - 第一個應用程式章節中所述。
3 com.tutorialspoint 包下建立 Java 類 System
4 specs.tutorialspoint 包下建立 Fixture 類 SystemFixture
5 specs.tutorialspoint 包下建立規範 html System.html
6 最後一步是建立所有 Java 檔案和規範檔案的內容,並按照以下說明執行應用程式。

以下是 System.java 檔案的內容 -

package com.tutorialspoint;
import org.concordion.api.MultiValueResult;

public class System { 
   public MultiValueResult split(String userName){  
      MultiValueResult result = new MultiValueResult();
      String[] words = userName.split(" ");   
      result.with("firstName", words[0]).with("lastName", words[1]);       
      return result;
   }
}

以下是 SystemFixture.java 檔案的內容 -

package specs.tutorialspoint;

import org.concordion.api.MultiValueResult;
import org.concordion.integration.junit4.ConcordionRunner;
import org.junit.runner.RunWith;

import com.tutorialspoint.System;

@RunWith(ConcordionRunner.class)
public class SystemFixture {
   System system = new System();
   public MultiValueResult split(String userName){
      return system.split(userName);
   }  
}

以下是 System.html 檔案的內容 -

<html xmlns:concordion = "http://www.concordion.org/2007/concordion">
   <head>
      <link href = "../concordion.css" rel = "stylesheet" type = "text/css" />
   </head>

   <body>
      <h1>System Specifications</h1>
      <p>We are building specifications for our online order tracking application.</p>
      <p>Following is the requirement to split full name of a logged in 
         user to its constituents by splitting name by whitespace:</p>
		
      <div class = "example">      
         <h3>Example</h3>
         <p>The full name <span concordion:execute = "#result = split(#TEXT)">Robert De</span> 
            is to be broken into first name <span 
            concordion:assertEquals = "#result.firstName">Robert</span> and last name <span 
            concordion:assertEquals = "#result.lastName">De</span>.</p>
      </div>
		
   </body>

</html>

完成原始檔和規範檔案的建立後,讓我們以 JUnit 測試的方式執行應用程式。如果您的應用程式一切正常,它將產生以下結果 -

C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\concordion\specs\tutorialspoint\System.html
Successes: 2, Failures: 0

System.html 是 Concordion 測試執行的輸出。

concordion Returning Map Output

Concordion - 在表格上執行

Concordion execute 命令可用於以重複的方式執行 concordion fixture 的操作。例如,如果我們想以表格的形式用多個示例來說明一個需求,它將非常有用。

考慮以下需求 -

<table>
   <tr><th>First Number</th><th>Second Number</th><th>Sum</th></tr>
   <tr><td>2</td><td>3</td><td>5</td></tr>
   <tr><td>4</td><td>5</td><td>9</td></tr>
</table>

如果我們想為一個 sum 函式編寫規範,該函式將接受兩個數字並輸出它們的和,則規範如下 -

<table>
   <tr><th>First Number</th><th>Second Number</th><th>Sum</th></tr>
   <tr concordion:execute = "#result = sum(#fullName)">
      <td concordion:set = "#firstNumber">2</td>
      <td concordion:set = "#secondNumber">3</td>
      <td concordion:assertEquals = "#result">5</td>
   </tr>
   <tr concordion:execute = "#result = sum(#fullName)">
      <td concordion:set = "#firstNumber">4</td>
      <td concordion:set = "#secondNumber">5</td>
      <td concordion:assertEquals = "#result">9</td>
   </tr>
</table>

當 Concordion 解析文件時,它將設定一個臨時變數 #firstNumber 為值“2”,並將 #secondNumber 設定為值“3”。然後,它將使用 #firstNumber 和 #secondNumber 作為引數執行 sum() 方法,使用 execute 命令並將結果設定到 #result 變數中,並檢查 #result 變數是否等於“5”。此過程對每個表格行元素重複。

示例

讓我們準備好一個正在執行的 Eclipse IDE,並按照以下步驟建立 Concordion 應用程式 -

步驟 描述
1 建立一個名為 concordion 的專案,並在建立的專案中 src 資料夾下建立一個名為 com.tutorialspoint 的包。
2 使用新增外部 JAR 選項新增所需的 Concordion 庫,如Concordion - 第一個應用程式章節中所述。
3 com.tutorialspoint 包下建立 Java 類 System
4 specs.tutorialspoint 包下建立 Fixture 類 SystemFixture
5 specs.tutorialspoint 包下建立規範 html System.html
6 最後一步是建立所有 Java 檔案和規範檔案的內容,並按照以下說明執行應用程式。

以下是 System.java 檔案的內容 -

package com.tutorialspoint;
public class System {
   public int sum(int firstNumber, int secondNumber) {
      return firstNumber + secondNumber;
   }
}

以下是 SystemFixture.java 檔案的內容 -

package specs.tutorialspoint;

import org.concordion.integration.junit4.ConcordionRunner;
import org.junit.runner.RunWith;
import com.tutorialspoint.System;

@RunWith(ConcordionRunner.class)

public class SystemFixture {
   System system = new System();
   public int sum(int firstNumber, int secondNumber) {
      return system.sum(firstNumber, secondNumber);
   }
}

以下是 System.html 檔案的內容 -

<html xmlns:concordion = "http://www.concordion.org/2007/concordion">
   <head>
      <link href = "../concordion.css" rel = "stylesheet" type = "text/css" />
   </head>

   <body>
      <h1>Calculator Specifications</h1>
      <p>We are building online calculator support in our website.</p>
      <p>Following is the requirement to add two numbers:</p>
		
      <div class = "example">
         <h3>Example</h3>
         <table>
            <tr>
               <th>First Number</th>
               <th>Second Number</th>
               <th>Sum</th>
            </tr>
            <tr concordion:execute = "#result = sum(#firstNumber, #secondNumber)">
               <td concordion:set = "#firstNumber">2</td>
               <td concordion:set = "#secondNumber">3</td>
               <td concordion:assertEquals = "#result">5</td>
            </tr>
            <tr concordion:execute = "#result = sum(#firstNumber, #secondNumber)">
               <td concordion:set = "#firstNumber">4</td>
               <td concordion:set = "#secondNumber">5</td>
               <td concordion:assertEquals = "#result">9</td>
            </tr>
         </table>
      </div>
		
   </body>

</html>

完成原始檔和規範檔案的建立後,讓我們以 JUnit 測試的方式執行應用程式。如果您的應用程式一切正常,它將產生以下結果 -

C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\concordion\specs\tutorialspoint\System.html
Successes: 2, Failures: 0

System.html 是 Concordion 測試執行的輸出。

concordion Execute on Table Output

Concordion - 在列表上執行

Concordion execute 命令可用於以重複的方式執行 concordion fixture 的操作。例如,如果我們想以列表的形式用多個示例來說明一個需求,它將非常有用。

考慮以下需求 -

<ul>
   <li>The full name Robert De is to be split as
      <ul>
         <li>Robert</li>
         <li>De</li>
      </ul>
   </li>
	
   <li>The full name John Diere is to be split as
      <ul>
         <li>John</li>
         <li>Diere</li>
      </ul>
   </li>
	
</ul>

如果我們想為一個 split 函式編寫規範,該函式將把一個名稱拆分為其名和姓,則規範如下 -

<ul>
   <li>The full name <span concordion:execute = "#result = split(#TEXT)">
      Robert De</span> is to be splited as
      <ul>
         <li><span concordion:assertEquals = "#result.firstName">Robert</span></li>
         <li><span concordion:assertEquals = "#result.lastName">De</span></li>
      </ul>
   </li>
	
   <li>The full name <span concordion:execute = "#result = split(#TEXT)">
      John Diere</span> is to be splited as
      <ul>
         <li><span concordion:assertEquals = "#result.firstName">John</span></li>
         <li><span concordion:assertEquals = "#result.lastName">Diere</span></li>
      </ul>
   </li>
</ul>

當 Concordion 解析文件時,它將設定特殊變數 #TEXT 的值為當前元素的值“Robert De”,並將其傳遞給 split 函式。然後,它將使用 #TEXT 作為引數執行 split() 方法,使用 execute 命令並將結果設定到 #result 變數中,並使用結果,列印 firstName 和 lastName 值作為輸出。

示例

讓我們準備好一個正在執行的 Eclipse IDE,並按照以下步驟建立 Concordion 應用程式 -

步驟 描述
1 建立一個名為 concordion 的專案,並在建立的專案中 src 資料夾下建立一個名為 com.tutorialspoint 的包。
2 使用新增外部 JAR 選項新增所需的 Concordion 庫,如Concordion - 第一個應用程式章節中所述。
3 com.tutorialspoint 包下建立 Java 類 System
4 specs.tutorialspoint 包下建立 Fixture 類 SystemFixture
5 specs.tutorialspoint 包下建立規範 html System.html
6 最後一步是建立所有 Java 檔案和規範檔案的內容,並按照以下說明執行應用程式。

以下是 System.java 檔案的內容 -

package com.tutorialspoint;
import org.concordion.api.MultiValueResult;

public class System { 
   public MultiValueResult split(String userName){  
      MultiValueResult result = new MultiValueResult();
      String[] words = userName.split(" ");   
      result.with("firstName", words[0]).with("lastName", words[1]);       
      return result;
   }
}

以下是 SystemFixture.java 檔案的內容 -

package specs.tutorialspoint;

import org.concordion.api.MultiValueResult;
import org.concordion.integration.junit4.ConcordionRunner;
import org.junit.runner.RunWith;
import com.tutorialspoint.System;

@RunWith(ConcordionRunner.class)

public class SystemFixture {
   System system = new System();
   public MultiValueResult split(String userName){
      return system.split(userName);
   }  
}

以下是 System.html 檔案的內容 -

<html xmlns:concordion = "http://www.concordion.org/2007/concordion">
   <head>
      <link href = "../concordion.css" rel = "stylesheet" type = "text/css" />
   </head>

   <body>
      <h1>System Specifications</h1>
      <p>We are building specifications for our online order tracking application.</p>
      <p>Following is the requirement to split full name of a logged 
         in user to its constituents by splitting name by whitespace:</p>
			
      <div class = "example">      
         <h3>Example</h3>
         <ul>
            <li>The full name <span concordion:execute = "#result = split(#TEXT)">
               Robert De</span> is to be splited as
               <ul>
                  <li><span concordion:assertEquals = "#result.firstName">
                     Robert</span></li>
                  <li><span concordion:assertEquals = "#result.lastName">
                     De</span></li>
               </ul>
            </li>
				
            <li>The full name <span concordion:execute ="#result = split(#TEXT)">
               John Diere</span> is to be splited as
               <ul>
                  <li><span concordion:assertEquals = "#result.firstName">
                     John</span></li>
                  <li><span concordion:assertEquals = "#result.lastName">
                     Diere</span></li>
               </ul>
            </li>
         </ul>
      </div>
   </body>

</html>

完成原始檔和規範檔案的建立後,讓我們以 JUnit 測試的方式執行應用程式。如果您的應用程式一切正常,它將產生以下結果 -

C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\concordion\specs\tutorialspoint\System.html
Successes: 4, Failures: 0

System.html 是 Concordion 測試執行的輸出。

concordion Execute on List Output

Concordion - verifyRows 命令

Concordion verifyRows 命令可用於檢查系統返回的結果集合的內容。例如,如果我們在系統中設定了一組使用者並在其上進行部分搜尋,則系統應返回匹配的元素,否則我們的驗收測試將失敗。

考慮以下需求 -

<table>
   <tr><th>Users</th></tr>
   <tr><td>Robert De</td></tr>
   <tr><td>John Diere</td></tr>
   <tr><td>Julie Re</td></tr>
</table>

<p>Search for J should return:</p>

<table>
   <tr><th>Matching Users</th></tr>
   <tr><td>John Diere</td></tr>
   <tr><td>Julie Re</td></tr>
</table>

如果我們想要為這樣一個搜尋功能編寫規範,該功能將搜尋並返回一個集合,那麼規範將如下所示:

<table concordion:execute = "addUser(#username)">
   <tr><th concordion:set = "#username">Username</th></tr>
   <tr><td>Robert De</td></tr>
   <tr><td>John Diere</td></tr>
   <tr><td>Julie Re</td></tr>
</table>

<p>Search for "<b concordion:set = "#searchString">J</b>" should return:</p>

<table concordion:verifyRows = "#username : search(#searchString)">
   <tr><th concordion:assertEquals = "#username">Matching Usernames</th></tr>
   <tr><td>John Diere</td></tr>
   <tr><td>Julie Re</td></tr>
</table>

當 Concordion 解析文件時,它將在第一個表的每一行上執行 addUser(),然後將 searchString 設定為 J。接下來,Concordion 將執行搜尋功能,該功能應返回一個具有可預測迭代順序的 Iterable 物件(例如 List、LinkedHashSet 或 TreeSet),verifyRows 為集合中的每個專案執行並執行 assertEquals 命令。

示例

讓我們準備好一個正在執行的 Eclipse IDE,並按照以下步驟建立 Concordion 應用程式 -

步驟 描述
1 建立一個名為 concordion 的專案,並在建立的專案中 src 資料夾下建立一個名為 com.tutorialspoint 的包。
2 使用新增外部 JAR 選項新增所需的 Concordion 庫,如Concordion - 第一個應用程式章節中所述。
3 com.tutorialspoint 包下建立 Java 類 System
4 specs.tutorialspoint 包下建立 Fixture 類 SystemFixture
5 specs.tutorialspoint 包下建立規範 html System.html
6 最後一步是建立所有 Java 檔案和規範檔案的內容,並按照以下說明執行應用程式。

以下是 System.java 檔案的內容 -

package com.tutorialspoint;

import java.util.HashSet;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;

public class System { 
   private Set<String> users = new HashSet<String>();
	
   public void addUser(String username) {
      users.add(username);
   }
	
   public Iterable<String> search(String searchString) {
      SortedSet<String> matches = new TreeSet<String>();
		
      for (String username : users) {
         if (username.contains(searchString)) {
            matches.add(username);
         }
      }
		
      return matches;
   }
}

以下是 SystemFixture.java 檔案的內容 -

package specs.tutorialspoint;

import org.concordion.integration.junit4.ConcordionRunner;
import org.junit.runner.RunWith;
import com.tutorialspoint.System;

@RunWith(ConcordionRunner.class)

public class SystemFixture {
   System system = new System();
   public void addUser(String username) {
      system.addUser(username);
   }
	
   public Iterable<String> search(String searchString) {
      return system.search(searchString);
   }
}

以下是 System.html 檔案的內容 -

<html xmlns:concordion = "http://www.concordion.org/2007/concordion">
   <head>
      <link href = "../concordion.css" rel = "stylesheet" type = "text/css" />
   </head>

   <body>
      <h1>System Specifications</h1>
      <p>We are building specifications for our online order tracking application.</p>
      <p>Following is the requirement to add a partial search capability on user names:</p>
		
      <div class = "example">      
         <h3>Example</h3>
			
         <table concordion:execute = "addUser(#username)">
            <tr><th concordion:set = "#username">Username</th></tr>
            <tr><td>Robert De</td></tr>
            <tr><td>John Diere</td></tr>
            <tr><td>Julie Re</td></tr>
         </table>
			
         <p>Search for "<b concordion:set = "#searchString">J</b>" should return:</p>
			
         <table concordion:verifyRows = "#username : search(#searchString)">
            <tr><th concordion:assertEquals = "#username">Matching Usernames</th></tr>
            <tr><td>John Diere</td></tr>
            <tr><td>Julie Re</td></tr>
         </table>
			
      </div> 
		
   </body>

</html>

完成原始檔和規範檔案的建立後,讓我們以 JUnit 測試的方式執行應用程式。如果您的應用程式一切正常,它將產生以下結果 -

C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\concordion\specs\tutorialspoint\System.html
Successes: 2, Failures: 0

System.html 是 Concordion 測試執行的輸出。

concordion verifyRows Output

Concordion - 執行命令

Concordion 執行命令可用於將多個規範連結在一起並在一箇中心頁面上顯示它們。此命令可以執行所有規範,同時根據需要將連結的背景顯示為綠色/紅色/灰色。

現在我們將建立兩個規範並將它們連結在一起。我們將重用在Concordion - 在列表上執行Concordion - 在表格上執行章節中建立的規範作為系統規範和計算器規範。

示例

讓我們準備好一個正在執行的 Eclipse IDE,並按照以下步驟建立 Concordion 應用程式 -

步驟 描述
1 建立一個名為 concordion 的專案,並在建立的專案中 src 資料夾下建立一個名為 com.tutorialspoint 的包。
2 使用新增外部 JAR 選項新增所需的 Concordion 庫,如Concordion - 第一個應用程式章節中所述。
3 com.tutorialspoint 包下建立 Java 類 System
4 specs.tutorialspoint 包下建立 Fixture 類 SystemFixtureCalculatorFixture
5 specs.tutorialspoint 包下建立規範 html 檔案 System.htmlCalculator.html
6 最後一步是建立所有 Java 檔案和規範檔案的內容,並按照以下說明執行應用程式。

以下是 System.java 檔案的內容 -

package com.tutorialspoint;
import org.concordion.api.MultiValueResult;

public class System { 
   public MultiValueResult split(String userName){  
      MultiValueResult result = new MultiValueResult();
      String[] words = userName.split(" ");   
      result.with("firstName", words[0]).with("lastName", words[1]);       
      return result;
   }
	
   public int sum(int firstNumber, int secondNumber) {
      return firstNumber + secondNumber;
   }
}

以下是 SystemFixture.java 檔案的內容 -

package specs.tutorialspoint;

import org.concordion.api.MultiValueResult;
import org.concordion.integration.junit4.ConcordionRunner;
import org.junit.runner.RunWith;
import com.tutorialspoint.System;

@RunWith(ConcordionRunner.class)

public class SystemFixture {
   System system = new System();
   public MultiValueResult split(String userName){
      return system.split(userName);
   }  
}

以下是 CalculatorFixture.java 檔案的內容:

package specs.tutorialspoint;

import org.concordion.integration.junit4.ConcordionRunner;
import org.junit.runner.RunWith;
import com.tutorialspoint.System;

@RunWith(ConcordionRunner.class)

public class CalculatorFixture {
   System system = new System();
   public int sum(int firstNumber, int secondNumber) {
      return system.sum(firstNumber, secondNumber);
   }
}

以下是 System.html 檔案的內容 -

<html xmlns:concordion = "http://www.concordion.org/2007/concordion">
   <head>
      <link href = "../concordion.css" rel = "stylesheet" type = "text/css" />
   </head>

   <body>
      <h1>System Specifications</h1>
      <p>We are building specifications for our online 
         order tracking application.</p>
      <p>Following is the requirement to split full name of a 
         logged in user to its constituents by splitting name by whitespace:</p>
		
      <div class = "example">      
         <h3>Example</h3>
			
         <ul>
            <li>The full name <span concordion:execute = "#result = split(#TEXT)">
               Robert De</span> is to be splited as
               <ul>
                  <li><span concordion:assertEquals = "#result.firstName">
                     Robert</span></li>
                  <li><span concordion:assertEquals = "#result.lastName">
                     De</span></li>
               </ul>
            </li>
         
            <li>The full name <span concordion:execute = "#result = split(#TEXT)">
               John Diere</span> is to be splited as
               <ul>
                  <li><span concordion:assertEquals = "#result.firstName">
                     John</span></li>
                  <li><span concordion:assertEquals = "#result.lastName">
                     Diere</span></li>
               </ul>
            </li>
      
         </ul>
      </div>
   
      <a concordion:run = "concordion" href = "Calculator.html">
         Calculator Service Specifications</a>
   </body>

</html>

以下是 Calculator.html 檔案的內容:

<html xmlns:concordion = "http://www.concordion.org/2007/concordion">
   <head>
      <link href = "../concordion.css" rel = "stylesheet" type = "text/css" />
   </head>

   <body>
      <h1>Calculator Specifications</h1>
      <p>We are building online calculator support in our website.</p>
      <p>Following is the requirement to add two numbers:</p>
		
      <div class = "example">
         <h3>Example</h3>
		
         <table>
            <tr>
               <th>First Number</th>
               <th>Second Number</th>
               <th>Sum</th>
            </tr>
            <tr concordion:execute = "#result = sum(#firstNumber, #secondNumber)">
               <td concordion:set = "#firstNumber">2</td>
               <td concordion:set = "#secondNumber">3</td>
               <td concordion:assertEquals = "#result">5</td>
            </tr>
            <tr concordion:execute = "#result = sum(#firstNumber, #secondNumber)">
               <td concordion:set = "#firstNumber">4</td>
               <td concordion:set = "#secondNumber">5</td>
               <td concordion:assertEquals = "#result">9</td>
            </tr>
         </table>
   
      </div>
   </body>

</html>

完成原始檔和規範檔案的建立後,讓我們以 JUnit 測試的方式執行應用程式。如果您的應用程式一切正常,它將產生以下結果 -

C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\concordion\specs\tutorialspoint\System.html
Successes: 2, Failures: 0
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\concordion\specs\tutorialspoint\System.html
Successes: 6, Failures: 0

System.html 是 Concordion 測試執行的輸出。

concordion Run Command Output

點選連結“計算器服務規範”。您將看到以下輸出:

concordion Output
廣告