Concordion - Hướng dẫn nhanh

Concordion là gì?

Concordion là một công cụ mạnh mẽ để viết và quản lý các kiểm thử chấp nhận tự động trong các dự án dựa trên Java. Nó tích hợp trực tiếp với khung công tác JUnit, làm cho nó sẵn sàng được sử dụng với tất cả các IDE dựa trên JAVA phổ biến như Netbeans, Eclipse, IntelliJ IDEA.

Đặc tả phần mềm hoạt động

Đặc tả phần mềm hoạt động là một cách để chỉ định hành vi của một tính năng. Nó cũng cung cấp một cách để triển khai và xác minh đặc tả phần mềm bằng cách có kết nối với hệ thống đang được phát triển.

Một đặc tả hoạt động trong Concordion gồm hai phần:

  1. Tài liệu yêu cầu được viết rõ ràng mô tả chức năng mong muốn được viết bằng XHTML. Các thông số kỹ thuật dựa trên XHTML chứa các mô tả về chức năng được cung cấp cùng với các ví dụ kiểm tra chấp nhận. Dữ liệu của ví dụ được đánh dấu bằng các thẻ HTML đơn giản.

  2. Các bài kiểm tra chấp nhận được viết bằng ngôn ngữ Java được gọi là mã cố định. Sử dụng phần mở rộng Concordion của trường hợp thử nghiệm JUnit tiêu chuẩn, thử nghiệm được thực hiện. Khả năng của Mã kết hợp là tìm dữ liệu của ví dụ được đánh dấu bằng thẻ và sử dụng chúng để xác minh phần mềm đang được phát triển.

Đầu ra của Cncordion

Khi các bài kiểm tra đặc tả hoạt động của Concordion được chạy, các tệp XHTML outpu hiển thị thông số kỹ thuật gốc và kết quả kiểm tra. Thử nghiệm thành công được đánh dấu bằng màu "xanh lá cây" và thử nghiệm không thành công được đánh dấu bằng màu "đỏ". Vì bất kỳ thay đổi nào trong hệ thống sẽ dẫn đến việc không thực hiện được bài kiểm tra, điều này giúp xác định rằng thông số kỹ thuật cần được cập nhật, Concordion coi các thông số kỹ thuật này là thông số kỹ thuật hoạt động. Do đó thông số kỹ thuật luôn được cập nhật.

Các tính năng chính

Sau đây là các tính năng chính của Concordion:

  • Specifications as documentation- Đặc tả Concordion rất dễ đọc có thể được sử dụng làm tài liệu hệ thống hoạt động. Vì các thông số kỹ thuật dựa trên Concordion được viết bằng HTML, các tài liệu này có thể được siêu liên kết.

  • Specifications are live- Đặc tả Concordion chứa các ví dụ làm việc về hành vi được thực thi đối với hệ thống. Các thông số kỹ thuật được mã hóa bằng màu sắc để bất kỳ ai cũng có thể xem các ví dụ có hoạt động hay không. Việc thực thi các thông số kỹ thuật của Concordion thường xuyên làm cho tài liệu được cập nhật.

  • Separate "what?" from "how?"- Đặc tả Concordion giúp duy trì sự tách biệt giữa việc thực hiện và hành vi yêu cầu của hệ thống. Nó cung cấp sự linh hoạt mà việc triển khai có thể được thay đổi sau này.

  • Simple to learn- Thư viện Concordion được thiết kế giữ cho đường cong học tập ngắn gọn và súc tích. Nó có rất ít lệnh để học và các ví dụ được tự động hóa bằng cách sử dụng các bài kiểm tra JUnit để các bài kiểm tra có thể được chạy dễ dàng và có thể được tích hợp với các dự án hiện có một cách dễ dàng.

  • Powerful Customization- Concordion cung cấp API mở rộng cho phép thêm chức năng. Ví dụ: bảng tính Excel có thể được sử dụng làm thông số kỹ thuật, ảnh chụp màn hình có thể được thêm vào đầu ra, thông tin ghi nhật ký có thể được hiển thị và hơn thế nữa.

Hướng dẫn này sẽ hướng dẫn bạn cách chuẩn bị môi trường phát triển để bắt đầu công việc của bạn với Spring Framework. Hướng dẫn này cũng sẽ dạy bạn cách thiết lập JDK, Tomcat và Eclipse trên máy của bạn trước khi bạn thiết lập Spring Framework:

Bước 1 - Thiết lập Bộ phát triển Java (JDK):

Bạn có thể tải xuống phiên bản SDK mới nhất từ ​​trang web Java của Oracle: Tải xuống Java SE . Bạn sẽ tìm thấy hướng dẫn cài đặt JDK trong các tệp đã tải xuống, hãy làm theo hướng dẫn đã cho để cài đặt và định cấu hình thiết lập. Cuối cùng đặt các biến môi trường PATH và JAVA_HOME để tham chiếu đến thư mục chứa java và javac, thường là java_install_dir / bin và java_install_dir tương ứng.

Nếu bạn đang chạy Windows và cài đặt JDK trong C: \ jdk1.7.0_75, bạn sẽ phải đặt dòng sau vào tệp C: \ autoexec.bat của mình.

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

Ngoài ra, trên Windows NT / 2000 / XP, bạn cũng có thể nhấp chuột phải vào Máy tính của tôi, chọn Thuộc tính, sau đó là Nâng cao, sau đó là Biến môi trường. Sau đó, bạn sẽ cập nhật giá trị PATH và nhấn nút OK.

Trên Unix (Solaris, Linux, v.v.), nếu SDK được cài đặt trong /usr/local/jdk1.7.0_75 và bạn sử dụng trình bao C, bạn sẽ đưa phần sau vào tệp .cshrc của mình.

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

Ngoài ra, nếu bạn sử dụng Môi trường phát triển tích hợp (IDE) như Borland JBuilder, Eclipse, IntelliJ IDEA hoặc Sun ONE Studio, hãy biên dịch và chạy một chương trình đơn giản để xác nhận rằng IDE biết bạn đã cài đặt Java ở đâu, nếu không hãy thiết lập đúng như tài liệu đã cho của IDE.

Bước 2 - Thiết lập IDE Eclipse

Tất cả các ví dụ trong hướng dẫn này đã được viết bằng Eclipse IDE. Vì vậy, tôi khuyên bạn nên cài đặt phiên bản Eclipse mới nhất trên máy của mình.

Để cài đặt Eclipse IDE, hãy tải xuống các tệp nhị phân Eclipse mới nhất từ http://www.eclipse.org/downloads/. Sau khi bạn tải xuống bản cài đặt, hãy giải nén bản phân phối nhị phân vào một vị trí thuận tiện. Ví dụ trong C: \ eclipse trên windows hoặc / usr / local / eclipse trên Linux / Unix và cuối cùng đặt biến PATH một cách thích hợp.

Eclipse có thể được khởi động bằng cách thực hiện các lệnh sau trên máy tính windows, hoặc bạn có thể chỉ cần nhấp đúp vào eclipse.exe

%C:\eclipse\eclipse.exe

Eclipse có thể được khởi động bằng cách thực thi các lệnh sau trên máy Unix (Solaris, Linux, v.v.):

$/usr/local/eclipse/eclipse

Sau khi khởi động thành công, nếu mọi thứ đều ổn thì nó sẽ hiển thị kết quả sau:

Bước 3: Tải xuống kho lưu trữ Junit

Tải xuống phiên bản mới nhất của tệp jar JUnit từ http://www.junit.org. Tại thời điểm viết hướng dẫn này, tôi đã tải xuống Junit-4.10.jar và sao chép nó vào thư mục C: \> JUnit.

Hệ điều hành Tên lưu trữ
các cửa sổ junit4.10.jar
Linux junit4.10.jar
Mac junit4.10.jar

Bước 4: Đặt môi trường JUnit

Đặt JUNIT_HOMEbiến môi trường để trỏ đến vị trí thư mục cơ sở nơi lưu trữ jar JUNIT trên máy của bạn. Giả sử, chúng tôi đã lưu trữ junit4.10.jar trong thư mục JUNIT trên các Hệ điều hành khác nhau như sau.

Hệ điều hành Đầu ra
các cửa sổ Đặt biến môi trường JUNIT_HOME thành C: \ JUNIT
Linux xuất JUNIT_HOME = / usr / local / JUNIT
Mac xuất JUNIT_HOME = / Library / JUNIT

Bước 5: Đặt biến CLASSPATH

Đặt CLASSPATHbiến môi trường để trỏ đến vị trí jar JUNIT. Giả sử, chúng tôi đã lưu trữ junit4.10.jar trong thư mục JUNIT trên các Hệ điều hành khác nhau như sau.

Hệ điều hành Đầu ra
các cửa sổ Đặt biến môi trường CLASSPATH thành% CLASSPATH%;% JUNIT_HOME% \ junit4.10.jar;.;
Linux xuất CLASSPATH =$CLASSPATH:$JUNIT_HOME / junit4.10.jar:.
Mac xuất CLASSPATH =$CLASSPATH:$JUNIT_HOME / junit4.10.jar:.

Bước 6 - Thiết lập thư viện điều hòa

Bây giờ nếu mọi thứ đều ổn, thì bạn có thể tiến hành thiết lập các thư viện Concordion của mình. Sau đây là các bước đơn giản để tải xuống và cài đặt framework trên máy tính của bạn.

Tải xuống phiên bản mới nhất của tệp nhị phân khung Concordion từ http://dl.bintray.com/concordion/downloads/concordion-1.5.1.zip.

Tại thời điểm viết hướng dẫn này, tôi đã tải xuống concordion-1.5.1 trên máy Windows của mình và khi bạn giải nén tệp đã tải xuống, nó sẽ cung cấp cho bạn cấu trúc thư mục bên trong E: \ concordion-1.5.1 như sau.

  • lib - Thư viện thư mục

    • hamcrest-core-1.3.jar

    • junit-4.12.jar

    • ognl-2.6.9.jar

    • xom-1.2.5.jar

  • src - Thư mục mã nguồn

    • main

    • test

    • test-dummies

  • concordion-1.5.1.jar

Bạn sẽ tìm thấy tất cả các thư viện phụ thuộc Concordion trong thư mục E: \ concordion \ lib. Đảm bảo rằng bạn đặt biến CLASSPATH của mình trên thư mục này đúng cách, nếu không bạn sẽ gặp sự cố khi chạy ứng dụng của mình. Nếu bạn đang sử dụng Eclipse thì không bắt buộc phải đặt CLASSPATH vì tất cả cài đặt sẽ được thực hiện thông qua Eclipse.

Khi bạn đã hoàn thành bước cuối cùng này, bạn đã sẵn sàng tiếp tục cho Ví dụ kết hợp đầu tiên mà bạn sẽ thấy trong chương tiếp theo.

Concordion - Ứng dụng đầu tiên

Chúng ta hãy bắt đầu lập trình với Concordion. Trước khi bạn bắt đầu viết ví dụ đầu tiên của mình bằng Concordion, bạn phải đảm bảo rằng bạn đã thiết lập môi trường Concordion đúng cách như đã giải thích trong hướng dẫn Thiết lập Môi trường - Concordion . Chúng tôi cũng giả định rằng bạn có một chút kiến ​​thức về Eclipse IDE.

Vì vậy, chúng ta hãy tiến hành viết một ứng dụng Concordion đơn giản để in bản kiểm tra chấp nhận sau:

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

Bước 1 - Tạo dự án Java

Bước đầu tiên là tạo một dự án Java đơn giản bằng Eclipse IDE. Làm theo tùy chọnFile → New → Project và cuối cùng chọn Java Projectwizard từ danh sách wizard. Bây giờ đặt tên cho dự án của bạn làConcordion bằng cách sử dụng cửa sổ thuật sĩ như sau:

Khi dự án của bạn được tạo thành công, bạn sẽ có nội dung sau trong Project Explorer -

Bước 2 - Thêm Thư viện Bắt buộc

Hãy để chúng tôi thêm concordion và các phụ thuộc của nó vào dự án của chúng tôi. Để làm điều này, hãy nhấp chuột phải vào tên dự án của bạnconcordion và sau đó làm theo các tùy chọn có sẵn trong menu ngữ cảnh: Build Path → Configure Build Path để hiển thị cửa sổ Java Build Path như sau:

Bây giờ sử dụng Add External JARs nút có sẵn dưới Libraries để thêm JAR cốt lõi sau từ thư mục Concordion.

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

Bước 3 - Tạo tệp nguồn

Bây giờ chúng ta hãy tạo các tệp nguồn thực tế trong concordiondự án. Đầu tiên, chúng ta cần tạo một gói có têncom.tutorialspoint. Để làm điều này, nhấp chuột phải vàosrc trong phần trình khám phá gói và làm theo tùy chọn: New → Package.

Tiếp theo, chúng tôi sẽ tạo Hệ thống .java tệp trong gói com.tutorialspoint.

Đây là nội dung của System.java tập tin -

package com.tutorialspoint;

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

Bước 4 - Tạo tệp thông số kỹ thuật

Bây giờ chúng ta hãy tạo các tệp thông số kỹ thuật thực tế trong concordiondự án. Đầu tiên, chúng ta cần tạo một thư mục nguồn mới có tênspecs. Thư mục này sẽ chứa các tệp đặc tả như JUnitFixture hoặc tệp chạy thử nghiệm và html là các thông số kỹ thuật. Bây giờ chúng ta cần tạo một gói có tênspecs.tutorialspoint. Để làm điều này, nhấp chuột phải vàospec trong phần trình khám phá gói và làm theo tùy chọn: New → Package.

Tiếp theo, chúng tôi sẽ tạo System.htmlSystemFixture.javacác tệp trong gói specs.tutorialspoint. Sau đó, chúng tôi sẽ thêmconcordion.css dưới thư mục nguồn thông số kỹ thuật.

Đây là nội dung của System.html tập tin -

<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>

Đây là nội dung của SystemFixture.java tập tin -

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);
   }
}

Đây là nội dung của concordion.css tập tin -

* {
   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;
}

Có hai điểm quan trọng cần lưu ý về tệp html đặc tả và Lịch thi thử -

  • System.html là tệp html đặc tả sử dụng không gian tên concordion.

<html xmlns:concordion="http://www.concordion.org/2007/concordion">
  • System.html sử dụng lệnh concordion: set để đặt giá trị của các biến tạm thời userName là Robert. Ở đây, userName là tham số được truyền cho phương thức getGreeting của System fixture.

When <span concordion:set="#userName">Robert</span> logs in the system
  • System.html sử dụng lệnh concordion: khẳng địnhEquals để kiểm tra kết quả đầu ra của hàm getGreeting (userName) là Xin chào Robert !.

a greeting "<span concordion:assertEquals="getGreeting(#userName)">
Hello Robert!</span>" is displayed.
  • SystemFixture là một thiết bị kiểm tra JUnit được chú thích bằng ConcordionRunner.class.

@RunWith(ConcordionRunner.class)
public class SystemFixture {
  • SystemFixture có một phương thức getGreeting trả về lời chào cho người dùng.

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

Bước 5 - Chạy chương trình

Nhấp chuột phải vào vùng nội dung của SystemFixture và chọn Run as > JUnit Test Case. Bạn sẽ thấy kết quả sau với thành công tháng sáu.

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

System.html là kết quả của quá trình chạy thử nghiệm Concordion.

Xin chúc mừng, bạn đã tạo thành công thử nghiệm Chấp nhận Kết hợp đầu tiên của mình. Xa hơn nữa, chúng ta hãy bắt đầu làm điều gì đó thú vị hơn trong vài chương tiếp theo.

Concordion - đặt lệnh

Lệnh Concordion set được sử dụng để lưu trữ các biến tạm thời có thể được sử dụng trong các lệnh Concordion khác.

Hãy xem xét yêu cầu sau:

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

Nếu chúng ta muốn các số 2 và 3 là tham số và chuyển chúng đến hàm sum làm tham số để chúng có thể được xác minh với kết quả do hệ thống trả về, thì chúng ta có thể sử dụng lệnh concordion: set trong thẻ span xung quanh các số.

<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>

Khi Concordion phân tích cú pháp tài liệu, nó sẽ đặt một biến tạm thời #firstNumber thành giá trị "2" và #secondNumber thành giá trị "3" và sau đó gọi phương thức sum () với các tham số là #firstNumber và #secondNumber và kiểm tra xem kết quả là bằng "5".

Thí dụ

Hãy để chúng tôi có một IDE Eclipse hoạt động tại chỗ và làm theo các bước dưới đây để tạo một ứng dụng Concordion -

Bươc Sự miêu tả
1 Tạo một dự án với một tên concordion và tạo ra một gói com.tutorialspoint dướisrc thư mục trong dự án đã tạo.
2 Thêm các thư viện Concordion cần thiết bằng cách sử dụng tùy chọn Thêm JAR bên ngoài như được giải thích trong chương Concordion - Ứng dụng đầu tiên .
3 Tạo Hệ thống lớp Java theo gói com.tutorialspoint .
4 Tạo lớp Fixture SystemFixture trong gói specs.tutorialspoint .
5 Tạo Thông số kỹ thuật html System.html trong gói specs.tutorialspoint .
6 Bước cuối cùng là tạo nội dung của tất cả các tệp Java và tệp đặc tả và chạy ứng dụng như được giải thích bên dưới.

Đây là nội dung của tệp System.java -

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

Sau đây là nội dung của tệp 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);
   }
}

Sau đây là nội dung của tệp 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>

Khi bạn đã hoàn tất việc tạo tệp nguồn và đặc tả, hãy để chúng tôi chạy ứng dụng dưới dạng thử nghiệm JUnit. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ tạo ra kết quả sau:

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

System.html là kết quả của quá trình chạy thử nghiệm theo thứ tự.

Concordion - Lệnh khẳng địnhEquals

Lệnh Concordion khẳng địnhEquals được sử dụng để kiểm tra thuộc tính hoặc kết quả phương thức Java bean so với một giá trị được chỉ định.

Hãy xem xét yêu cầu sau:

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

Nếu chúng ta muốn các số 2 và 3 là tham số và chuyển chúng vào hàm sum dưới dạng tham số để nó có thể được xác minh với kết quả là 5 được hệ thống trả về thì chúng ta có thể sử dụng lệnh concordion: khẳng địnhEquals trong thẻ span xung quanh hàm sum .

<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>

Khi Concordion phân tích cú pháp tài liệu, nó sẽ đặt một biến tạm thời #firstNumber thành giá trị "2" và #secondNumber là giá trị "3" bằng cách sử dụng lệnh set và sau đó gọi phương thức sum () với các tham số là #firstNumber và #secondNumber và kiểm tra xem kết quả có bằng "5" hay không bằng cách sử dụng lệnh khẳng địnhEquals.

Thí dụ

Hãy để chúng tôi hỗ trợ Eclipse IDE tại chỗ và làm theo các bước sau để tạo một ứng dụng Concordion -

Bươc Sự miêu tả
1 Tạo một dự án với một tên concordion và tạo ra một gói com.tutorialspoint dướisrc thư mục trong dự án đã tạo.
2 Thêm thư viện Concordion bắt buộc bằng cách sử dụng tùy chọn Thêm JAR bên ngoài như được giải thích trong chương Concordion - Ứng dụng đầu tiên .
3 Tạo Hệ thống lớp Java theo gói com.tutorialspoint .
4 Tạo lớp Fixture SystemFixture trong gói specs.tutorialspoint .
5 Tạo Thông số kỹ thuật html System.html trong gói specs.tutorialspoint .
6 Bước cuối cùng là tạo nội dung của tất cả các tệp Java và tệp đặc tả và chạy ứng dụng như được giải thích bên dưới.

Đây là nội dung của tệp System.java -

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

Sau đây là nội dung của tệp 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);
   }
}

Sau đây là nội dung của tệp 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>

Khi bạn đã hoàn tất việc tạo các tệp nguồn và đặc tả, hãy để chúng tôi chạy ứng dụng dưới dạng Kiểm tra JUnit. Nếu mọi thứ đều ổn với ứng dụng của bạn, thì nó sẽ hiển thị kết quả sau:

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

System.html là kết quả của quá trình chạy thử nghiệm Concordion.

Thành công: 1, Thất bại: 0

Concordion - Lệnh khẳng địnhTrue

Lệnh Concordion khẳng địnhTrue được sử dụng khi vật cố định cần biết kết quả mong đợi để thực hiện kiểm tra.

Hãy xem xét yêu cầu sau:

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

Nếu chúng ta muốn một bài kiểm tra được thực hiện trên Tên người dùng và kiểm tra xem tên người dùng có bắt đầu bằng R hay không.

<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>

Khi Concordion phân tích cú pháp tài liệu, nó sẽ đặt một biến tạm thời #userName thành giá trị "Robert De". Sau đó, nó sẽ kiểm tra xem userName có bắt đầu bằng chữ cái được chỉ định bởi biến #letter được đặt trong lệnh tiếp theo hay không.

Thí dụ

Hãy để chúng tôi có một IDE Eclipse hoạt động tại chỗ và làm theo các bước dưới đây để tạo một ứng dụng Concordion -

Bươc Sự miêu tả
1 Tạo một dự án với một tên concordion và tạo ra một gói com.tutorialspoint dướisrc thư mục trong dự án đã tạo.
2 Thêm các thư viện Concordion cần thiết bằng cách sử dụng tùy chọn Thêm JAR bên ngoài như được giải thích trong chương Concordion - Ứng dụng đầu tiên .
3 Tạo Hệ thống lớp Java theo gói com.tutorialspoint .
4 Tạo lớp Fixture SystemFixture trong gói specs.tutorialspoint .
5 Tạo Thông số kỹ thuật html System.html trong gói specs.tutorialspoint .
6 Bước cuối cùng là tạo nội dung của tất cả các tệp Java và tệp đặc tả và chạy ứng dụng như được giải thích bên dưới.

Đây là nội dung của tệp System.java -

package com.tutorialspoint;
public class System {   
}

Sau đây là nội dung của tệp SystemFixture.java:

package specs.tutorialspoint;

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

@RunWith(ConcordionRunner.class)

public class SystemFixture {
}

Sau đây là nội dung của tệp 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>

Khi bạn đã hoàn tất việc tạo các tệp nguồn và đặc tả, hãy để chúng tôi chạy ứng dụng dưới dạng Kiểm tra JUnit. Nếu mọi thứ đều ổn với ứng dụng của bạn, thì nó sẽ tạo ra kết quả sau:

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

System.html là kết quả của quá trình chạy thử nghiệm Concordion.

Concordion - Lệnh khẳng địnhFalse

Lệnh Concordion khẳng địnhFalse được sử dụng khi người thi đấu cần biết kết quả mong đợi để thực hiện kiểm tra.

Hãy xem xét yêu cầu sau:

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

Nếu chúng ta muốn kiểm tra được thực thi trên Tên người dùng và kiểm tra xem tên người dùng không bắt đầu bằng 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>

Khi Concordion phân tích cú pháp tài liệu, nó sẽ đặt một biến tạm thời #userName thành giá trị "Robert De". Sau đó, nó sẽ kiểm tra xem userName có bắt đầu bằng chữ cái được chỉ định bởi biến #letter được đặt trong lệnh tiếp theo hay không.

Thí dụ

Hãy để chúng tôi có một IDE Eclipse hoạt động tại chỗ và làm theo các bước dưới đây để tạo một ứng dụng Concordion -

Bươc Sự miêu tả
1 Tạo một dự án với một tên concordion và tạo ra một gói com.tutorialspoint dướisrc thư mục trong dự án đã tạo.
2 Thêm các thư viện Concordion cần thiết bằng cách sử dụng tùy chọn Thêm JAR bên ngoài như được giải thích trong chương Concordion - Ứng dụng đầu tiên .
3 Tạo Hệ thống lớp Java theo gói com.tutorialspoint .
4 Tạo lớp Fixture SystemFixture trong gói specs.tutorialspoint .
5 Tạo Thông số kỹ thuật html System.html trong gói specs.tutorialspoint .
6 Bước cuối cùng là tạo nội dung của tất cả các tệp Java và tệp đặc tả và chạy ứng dụng như được giải thích bên dưới.

Đây là nội dung của tệp System.java -

package com.tutorialspoint;
public class System {   
}

Sau đây là nội dung của tệp SystemFixture.java:

package specs.tutorialspoint;

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

@RunWith(ConcordionRunner.class)

public class SystemFixture {
}

Sau đây là nội dung của tệp 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>

Khi bạn đã hoàn tất việc tạo các tệp nguồn và đặc tả, hãy để chúng tôi chạy ứng dụng dưới dạng Kiểm tra JUnit. Nếu mọi thứ đều ổn với ứng dụng của bạn, thì nó sẽ tạo ra kết quả sau:

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

System.html là kết quả của quá trình chạy thử nghiệm Concordion.

Concordion - thực hiện lệnh

Lệnh thực thi Concordion được sử dụng để chạy hoạt động của bộ cố định concordion. Hãy xem xét yêu cầu sau:

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

Nếu chúng ta muốn viết một đặc tả cho một hàm tổng sẽ chấp nhận hai số và xuất ra tổng của chúng, thì đặc tả sẽ như sau:

<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>

Khi Concordion phân tích cú pháp tài liệu, nó sẽ đặt một biến tạm thời #firstNumber thành giá trị "2" và #secondNumber là giá trị "3" và sau đó thực thi phương thức sum () với các tham số là #firstNumber và #secondNumber bằng cách sử dụng thực thi lệnh và đặt kết quả vào biến #result và kiểm tra xem biến #result có bằng "5" không.

Thí dụ

Hãy để chúng tôi có một IDE Eclipse hoạt động tại chỗ và làm theo các bước dưới đây để tạo một ứng dụng Concordion -

Bươc Sự miêu tả
1 Tạo một dự án với một tên concordion và tạo ra một gói com.tutorialspoint dướisrc thư mục trong dự án đã tạo.
2 Thêm thư viện Concordion bắt buộc bằng cách sử dụng tùy chọn Thêm JAR bên ngoài như được giải thích trong chương Concordion - Ứng dụng đầu tiên .
3 Tạo Hệ thống lớp Java theo gói com.tutorialspoint .
4 Tạo lớp Fixture SystemFixture trong gói specs.tutorialspoint .
5 Tạo Thông số kỹ thuật html System.html trong gói specs.tutorialspoint .
6 Bước cuối cùng là tạo nội dung của tất cả các tệp Java và tệp đặc tả và chạy ứng dụng như được giải thích bên dưới.

Đây là nội dung của tệp System.java -

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

Sau đây là nội dung của tệp 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);
   }
}

Sau đây là nội dung của tệp 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>

Khi bạn đã hoàn tất việc tạo các tệp nguồn và đặc tả, hãy để chúng tôi chạy ứng dụng dưới dạng Kiểm tra JUnit. Nếu mọi thứ đều ổn với ứng dụng của bạn, thì nó sẽ tạo ra kết quả sau:

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

System.html là kết quả của quá trình chạy thử nghiệm Concordion.

Concordion - Đối tượng trả lại

Lệnh Concordion thực thi có thể được sử dụng để lấy kết quả của một hành vi ở dạng đối tượng mà chúng ta có thể nhận được nhiều kết quả đầu ra của một hành vi. Ví dụ, hãy xem xét yêu cầu sau:

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

Ở đây chúng ta cần có một hàm phân tách chấp nhận tên người dùng và trả về một đối tượng kết quả có tên và họ làm thuộc tính của nó để chúng ta có thể sử dụng chúng.

Nếu chúng ta muốn viết một thông số kỹ thuật cho một hàm phân tách như vậy sẽ yêu cầu một tên người dùng và xuất một đối tượng kết quả, thì sau đây sẽ là thông số kỹ thuật:

<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>

Khi Concordion phân tích cú pháp tài liệu, nó sẽ đặt giá trị của biến đặc biệt #TEXT làm giá trị của phần tử hiện tại là "Robert De" và chuyển nó vào hàm tách. Sau đó, nó sẽ thực thi phương thức split () với các tham số là #TEXT bằng cách sử dụng lệnh execute và đặt kết quả vào biến #result và sử dụng đối tượng result, in thuộc tính firstName và lastName làm đầu ra.

Thí dụ

Hãy để chúng tôi có một IDE Eclipse hoạt động tại chỗ và làm theo các bước dưới đây để tạo một ứng dụng Concordion -

Bươc Sự miêu tả
1 Tạo một dự án với tên concordion và tạo ra một gói com.tutorialspoint dướisrc thư mục trong dự án đã tạo.
2 Thêm các thư viện Concordion cần thiết bằng cách sử dụng tùy chọn Thêm JAR bên ngoài như được giải thích trong chương Concordion - Ứng dụng đầu tiên .
3 Tạo Hệ thống lớp Java , Kết quả theo gói com.tutorialspoint .
4 Tạo lớp Fixture SystemFixture trong gói specs.tutorialspoint .
5 Tạo Thông số kỹ thuật html System.html trong gói specs.tutorialspoint .
6 Bước cuối cùng là tạo nội dung của tất cả các tệp Java và tệp đặc tả và chạy ứng dụng như được giải thích bên dưới.

Đây là nội dung của tệp 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;
   } 
}

Đây là nội dung của tệp 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;
   }
}

Sau đây là nội dung của tệp 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);
   }  
}

Sau đây là nội dung của tệp 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>

Khi bạn đã hoàn tất việc tạo các tệp nguồn và đặc tả, hãy để chúng tôi chạy ứng dụng dưới dạng Kiểm tra JUnit. Nếu mọi thứ đều ổn với ứng dụng của bạn, thì nó sẽ tạo ra kết quả sau:

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

System.html là kết quả của quá trình chạy thử nghiệm Concordion.

Concordion - Bản đồ trả về

Lệnh thực thi Concordion có thể được sử dụng để lấy kết quả của một hành vi dưới dạng một Bản đồ bằng cách sử dụng mà chúng ta có thể nhận được nhiều đầu ra của một hành vi. Ví dụ, hãy xem xét yêu cầu sau:

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

Ở đây chúng ta cần có một hàm tràn chấp nhận một tên người dùng và trả về một đối tượng Bản đồ có FirstName và lastName là các khóa của nó có các giá trị tương ứng để chúng ta có thể sử dụng chúng.

Nếu chúng ta muốn viết một đặc tả cho một hàm tách như vậy sẽ chấp nhận tên người dùng và xuất một đối tượng kết quả, thì sau đây sẽ là đặc tả:

<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>

Khi Concordion phân tích cú pháp tài liệu, nó sẽ đặt giá trị của biến đặc biệt #TEXT thành giá trị của phần tử hiện tại là "Robert De" và chuyển nó vào hàm tách. Sau đó, nó sẽ thực thi phương thức split () với các tham số là #TEXT bằng cách sử dụng lệnh execute và đặt kết quả vào biến #result và sử dụng bản đồ kết quả, in giá trị firstName và lastName làm đầu ra.

Thí dụ

Hãy để chúng tôi có một IDE Eclipse hoạt động tại chỗ và làm theo các bước dưới đây để tạo một ứng dụng Concordion -

Bươc Sự miêu tả
1 Tạo một dự án với một tên concordion và tạo ra một gói com.tutorialspoint dướisrc thư mục trong dự án đã tạo.
2 Thêm các thư viện Concordion cần thiết bằng cách sử dụng tùy chọn Thêm JAR bên ngoài như được giải thích trong chương Concordion - Ứng dụng đầu tiên .
3 Tạo Hệ thống lớp Java theo gói com.tutorialspoint .
4 Tạo lớp Fixture SystemFixture trong gói specs.tutorialspoint .
5 Tạo Thông số kỹ thuật html System.html trong gói specs.tutorialspoint .
6 Bước cuối cùng là tạo nội dung của tất cả các tệp Java và tệp đặc tả và chạy ứng dụng như được giải thích bên dưới.

Đây là nội dung của tệp 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;
   }
}

Sau đây là nội dung của tệp 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);
   }  
}

Sau đây là nội dung của tệp 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>

Khi bạn đã hoàn tất việc tạo các tệp nguồn và đặc tả, hãy để chúng tôi chạy ứng dụng dưới dạng Kiểm tra JUnit. Nếu mọi thứ đều ổn với ứng dụng của bạn, thì nó sẽ tạo ra kết quả sau:

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

System.html là kết quả của quá trình chạy thử nghiệm Concordion.

Concordion - Trả lại MultiValueResult

Lệnh thực thi Concordion có thể được sử dụng để lấy kết quả của một hành vi dưới dạng một Bản đồ bằng cách sử dụng mà chúng ta có thể nhận được nhiều đầu ra của một hành vi. Ví dụ, hãy xem xét yêu cầu sau:

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

Ở đây chúng ta cần có một hàm phân tách chấp nhận tên người dùng và trả về một đối tượng Bản đồ có firstName và lastName làm khóa của nó với các giá trị tương ứng để chúng ta có thể sử dụng chúng.

Nếu chúng ta muốn viết một đặc tả cho một hàm tách như vậy sẽ chấp nhận một tên người dùng và xuất một đối tượng kết quả, thì đặc tả sẽ như sau:

<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>

Khi Concordion phân tích cú pháp tài liệu, nó sẽ đặt giá trị của biến đặc biệt #TEXT thành giá trị của phần tử hiện tại là "Robert De" và chuyển nó vào hàm tách. Sau đó, nó sẽ thực thi phương thức split () với các tham số là #TEXT bằng cách sử dụng lệnh execute và đặt kết quả vào biến #result và sử dụng bản đồ kết quả, in giá trị firstName và lastName làm đầu ra.

Thí dụ

Hãy để chúng tôi có một IDE Eclipse hoạt động tại chỗ và làm theo các bước dưới đây để tạo một ứng dụng Concordion -

Bươc Sự miêu tả
1 Tạo một dự án với tên concordion và tạo ra một gói com.tutorialspoint dướisrc thư mục trong dự án đã tạo.
2 Thêm các thư viện Concordion cần thiết bằng cách sử dụng tùy chọn Thêm JAR bên ngoài như được giải thích trong chương Concordion - Ứng dụng đầu tiên .
3 Tạo Hệ thống lớp Java theo gói com.tutorialspoint .
4 Tạo lớp Fixture SystemFixture trong gói specs.tutorialspoint .
5 Tạo Thông số kỹ thuật html System.html trong gói specs.tutorialspoint .
6 Bước cuối cùng là tạo nội dung của tất cả các tệp Java và tệp đặc tả và chạy ứng dụng như được giải thích bên dưới.

Đây là nội dung của tệp 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;
   }
}

Sau đây là nội dung của tệp 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);
   }  
}

Sau đây là nội dung của tệp 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>

Khi bạn đã hoàn tất việc tạo các tệp nguồn và đặc tả, hãy để chúng tôi chạy ứng dụng dưới dạng Kiểm tra JUnit. Nếu mọi thứ đều ổn với ứng dụng của bạn, thì nó sẽ tạo ra kết quả sau:

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

System.html là kết quả của quá trình chạy thử nghiệm Concordion.

Concordion - Thực thi trên bàn

Lệnh thực thi Concordion có thể được sử dụng để chạy hoạt động của bộ cố định concordion theo cách lặp lại. Ví dụ, sẽ rất hữu ích nếu chúng ta muốn minh họa một yêu cầu bằng nhiều ví dụ dưới dạng bảng.

Hãy xem xét yêu cầu sau:

<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>

Nếu chúng ta muốn viết một đặc tả cho một hàm tổng sẽ chấp nhận hai số và xuất ra tổng của chúng, thì đặc tả sẽ như sau:

<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>

Khi Concordion phân tích cú pháp tài liệu, nó sẽ đặt một biến tạm thời #firstNumber là giá trị "2" và #secondNumber là giá trị "3". Sau đó, nó sẽ thực thi phương thức sum () với các tham số là #firstNumber và #secondNumber bằng lệnh execute và đặt kết quả vào biến #result và kiểm tra xem biến #result có bằng "5" hay không. Quá trình này được lặp lại cho mỗi phần tử hàng của bảng.

Thí dụ

Hãy để chúng tôi có một IDE Eclipse hoạt động tại chỗ và làm theo các bước dưới đây để tạo một ứng dụng Concordion -

Bươc Sự miêu tả
1 Tạo một dự án với một tên concordion và tạo ra một gói com.tutorialspoint dướisrc folder in the created project.
2 Add required Concordion libraries using Add External JARs option as explained in the Concordion - First Application chapter.
3 Create Java class System under the com.tutorialspoint package.
4 Create Fixture class SystemFixture under the specs.tutorialspoint package.
5 Create Specification html System.html under the specs.tutorialspoint package.
6 The final step is to create the content of all the Java files and specification file and run the application as explained below.

Here is the content of System.java file −

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

Following is the content of SystemFixture.java file −

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);
   }
}

Following is the content of System.html file −

<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>

Once you are done with creating the source and specification files, let us run the application as JUnit Test. If everything is fine with your application, then it will produce the following result −

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

System.html is the output of Concordion test run.

Concordion - Execute on List

Concordion execute command can be used to run the operation of concordion fixture in a repeating manner. For example, it will be useful if we want to illustrate a requirement with multiple examples in the form of a list.

Consider the following requirement −

<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>

If we want write a specification for a split function which will split a name into its first name and last name, then the specification would be as follows −

<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>

When Concordion parses the document, it will set the value of the special variable #TEXT to be the value of the current element as "Robert De" and pass it to the split function. Then it will execute the split() method with parameters as #TEXT using execute command and set the result into #result variable and using result, print the firstName and lastName values as the output.

Example

Let us have a working Eclipse IDE in place and follow the steps given below to create a Concordion application −

Step Description
1 Create a project with a name concordion and create a package com.tutorialspoint under the src folder in the created project.
2 Add required Concordion libraries using Add External JARs option as explained in the Concordion - First Application chapter.
3 Create Java class System under the com.tutorialspoint package.
4 Create Fixture class SystemFixture under the specs.tutorialspoint package.
5 Create Specification html System.html under the specs.tutorialspoint package.
6 The final step is to create the content of all the Java files and specification file and run the application as explained below.

Here is the content of System.java file −

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;
   }
}

Following is the content of SystemFixture.java file −

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);
   }  
}

Following is the content of System.html file −

<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>

Once you are done with creating source and specification files, let us run the application as JUnit Test. If everything is fine with your application, then it will produce the following result −

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

System.html is the output of Concordion test run.

Concordion - verifyRows Command

Concordion verifyRows command can be used to check the content of a collection returned as a result by the system. For example, if we set up a set of users in the system and do a partial search on them, then the system should return the matching elements, otherwise our acceptance tests should fail.

Consider the following requirement −

<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>

If we want write a specification for such a search function which will search and return a collection, then the specification will be as follows −

<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>

When Concordion parses the document, it will execute addUser() on each row of the first table and then set the searchString to be J. Next, Concordion will execute the search function which should return a Iterable object with a predictable iteration order, (e.g. a List, LinkedHashSet or a TreeSet), verifyRows runs for each item of the collection and runs the assertEquals command.

Example

Let us have a working Eclipse IDE in place and follow the steps given below to create a Concordion application −

Step Description
1 Create a project with a name concordion and create a package com.tutorialspoint under the src folder in the created project.
2 Add the required Concordion libraries using Add External JARs option as explained in the Concordion - First Application chapter.
3 Create Java class System under the com.tutorialspoint package.
4 Create Fixture class SystemFixture under the specs.tutorialspoint package.
5 Create Specification html System.html under the specs.tutorialspoint package.
6 The final step is to create the content of all the Java files and specification file and run the application as explained below.

Here is the content of System.java file −

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;
   }
}

Following is the content of SystemFixture.java file −

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);
   }
}

Following is the content of System.html file −

<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>

Once you are done with creating the source and specification files, let us run the application as JUnit Test. If everything is fine with your application, then it will produce the following result −

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

System.html is the output of Concordion test run.

Concordion - Run Command

Concordion run command can be used to link multiple specifications together and display them at one central page. This command can run all the specifications, while displaying the link's background in green / red / gray as appropriate.

Now we are going to create two specifications and link them together. We'll be reusing the specifications created in Concordion - Execute on List and Concordion - Execute on Table chapters as System Specifications and Calculator Specifications.

Example

Let us have a working Eclipse IDE in place and follow the steps given below to create a Concordion application −

Step Description
1 Create a project with a name concordion and create a package com.tutorialspoint under the src folder in the created project.
2 Add the required Concordion libraries using Add External JARs option as explained in the Concordion - First Application chapter.
3 Create Java class System under the com.tutorialspoint package.
4 Create Fixture classes SystemFixture, CalculatorFixture under the specs.tutorialspoint package.
5 Create Specification html files System.html, Calculator.html under the specs.tutorialspoint package.
6 The final step is to create the content of all the Java files and specification file and run the application as explained below.

Here is the content of System.java file −

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;
   }
}

Following is the content of SystemFixture.java file −

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);
   }  
}

Following is the content of CalculatorFixture.java file −

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);
   }
}

Following is the content of System.html file −

<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>

Following is the content of Calculator.html file −

<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>

Once you are done with creating source and specification files, let us run the application as JUnit Test. If everything is fine with your application, then it will produce the following result −

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 is the output of Concordion test run.

Click on the link Calculator Service Specifications. You will see the following output −