Concordion - 返回地图

Concordion execute命令可用于以Map的形式获取行为的结果,使用该命令可以获得行为的多个输出.例如,考虑以下要求 :

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

这里我们需要一个spilled函数接受一个用户名并返回一个Map对象,该对象具有firstName和lastName作为其具有相应值的键,以便我们可以使用它们.

如果我们想为这样一个接受用户名并输出结果对象的拆分函数编写规范,那么以下将是规范 :

<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"并传递它分裂功能.然后它将使用execute命令执行带有#TEXT参数的split()方法,并将结果设置为#result变量并使用结果映射,将firstName和lastName值作为输出打印.

示例

让我们有一个可用的Eclipse IDE,并按照下面给出的步骤创建一个Concordion应用程序 :

Step描述
1创建一个名为 concordion 的项目并创建一个包 com.it1352在创建项目的 src 文件夹下.
2使用添加外部JAR 选项添加所需的Concordion库,如 Concordion  -  First Application 章节中所述.
3下创建Java类系统 com.it1352包.
4 specs.it1352下创建Fixture类 SystemFixture package.
5创建规范html System.html specs.it1352包下.
6最后一步是创建所有Java文件和规范文件的内容并运行应用程序,如下所述.

这是System.java文件的内容 :

package com.it1352;

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.it1352;

import java.util.Map;
import com.it1352.Result;
import com.it1352.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 Test的身份运行应用程序.如果您的应用程序一切正常,那么它将产生以下结果 :

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

System.html是Concordion测试运行的输出.

concordion返回地图输出